Wenn wir json_encode() in PHP verwenden, um ein Array in einen JSON-String zu konvertieren, tritt manchmal ein Problem auf, egal wie wir vorgehen, der konvertierte JSON-String ist leer. Dieses Problem kann frustrierend sein, aber seine Lösung ist einfach.
Lokalisieren Sie das Problem
Zuerst müssen wir das Problem finden. Wir können die Funktion var_dump() verwenden, um den Inhalt des Arrays anzuzeigen und zu prüfen, ob es Ausnahmen oder die erwarteten Daten gibt.
Zum Beispiel:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); var_dump($arr); echo json_encode($arr); ?>
Dieser Code gibt Folgendes aus:
array(3) { ["name"]=> string(4) "John" ["age"]=> int(30) ["city"]=> string(8) "New York" }
Dann versuchen wir, json_encode() zu verwenden, um das Array in einen JSON-String zu konvertieren. Als Ergebnis erhalten wir eine leere Zeichenfolge. Dieses Ergebnis überraschte uns und ließ uns an unserem eigenen Können zweifeln.
Fehlerbehebung
Als nächstes wollen wir das Problem Schritt für Schritt beheben.
Die Funktion json_encode() von PHP erfordert, dass die Eingabedaten UTF-8-kodiert sein müssen. Wenn das Array nicht UTF-8-codierte Zeichen enthält, schlägt die Konvertierung in eine JSON-Zeichenfolge fehl.
Sie können die Zeichenfolgen im Array über die Funktion iconv() oder mb_convert_encoding() in UTF-8-Kodierung konvertieren. Zum Beispiel:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); foreach($arr as &$value){ $value = mb_convert_encoding($value, 'UTF-8', 'auto'); } echo json_encode($arr); ?>
Die JSON-Spezifikation lässt keine Nullwerte zu. Wenn das Array also Nullwerte enthält, führt die Verwendung von json_encode() dazu, dass die Konvertierung fehlschlägt und Null zurückgibt.
An dieser Stelle können Sie die Funktion array_map() verwenden, um den Nullwert im Array durch eine leere Zeichenfolge zu ersetzen. Zum Beispiel:
<?php $arr = array("name" => "John", "age" => null, "city" => "New York"); $arr = array_map(function($value){ return $value !== null ? $value : ''; },$arr); echo json_encode($arr); ?>
Der Schlüsselname in JSON muss vom Typ String sein, was bedeutet, dass der Schlüsselname im Array ein String sein muss. Wenn Sie Zahlen als Schlüssel verwenden, werden Sie Probleme bei der Verwendung der Funktion json_encode() haben.
Wenn wir im folgenden Beispiel die Funktion json_encode() verwenden, ist das Ergebnis eine leere Zeichenfolge:
<?php $arr = array(0=>'apple',1=>'banana',2=>'orange'); echo json_encode($arr); ?>
Zu diesem Zeitpunkt müssen Sie den Namen des numerischen Schlüssels in einen Zeichenfolgentyp ändern. Zum Beispiel:
<?php $arr = array('0'=>'apple','1'=>'banana','2'=>'orange'); echo json_encode($arr); ?>
Wenn das Array eine Referenz auf einen unendlichen Zyklus enthält, kann die Funktion json_encode() das Array nicht verarbeiten und keine zurückgeben leere Zeichenfolge. Wenn in Ihrem Array Selbstreferenzbeziehungen verschachtelt sind, wird dieses Problem bei der Verwendung von json_encode() auf jeden Fall auftreten.
Beim Lösen dieses Problems müssen Sie sicherstellen, dass Ihr Array serialisiert werden kann. Das heißt, Sie sollten alle Objektreferenzen durch serialisierbare Datentypen ersetzen. Zum Beispiel:
<?php $arr = array(); $item1 = array('id'=>1,'name'=>'apple'); $item2 = array('id'=>2,'name'=>'banana'); $item1['next'] = &$item2; $item2['prev'] = &$item1; $item3 = array('id'=>3,'data'=>array_merge($item1,$item2)); $arr[] = $item1; $arr[] = $item2; $arr[] = $item3['data']; echo json_encode($arr); ?>
In diesem Beispiel erstellen wir ein Array mit selbstreferenziellen Beziehungen. Um das Problem zu lösen, haben wir die Objektreferenz in einen serialisierbaren Datentyp geändert, wodurch das Problem unendlicher Referenzzyklen vermieden wurde und wir das Array erfolgreich in einen JSON-String konvertieren konnten.
Zusammenfassung
Geraten Sie nicht in Panik, wenn Sie bei der Verwendung von json_encode() in PHP auf eine leere JSON-Zeichenfolge stoßen. Wenn Sie die oben genannten vier Methoden befolgen, können Sie dieses Problem leicht lösen. Stellen Sie sicher, dass das Array UTF-8-codiert ist, dass das Array keine Nullwerte enthält, dass die Schlüsselnamen im Array gültig sind und dass es keine unendlichen Zirkelverweise im Array gibt. Sie können problemlos json_encode( verwenden. )-Funktion, um Ihr Array erfolgreich in eine JSON-Zeichenfolge umzuwandeln.
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, wenn das PHP-Array in das JSON-Format konvertiert wird und leer ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!