Sparse-Arrays, die als JSON-Objekte in json_encode kodiert sind
Wenn ein Array einen fehlenden Index enthält, wird es als Sparse-Array bezeichnet. json_encode behandelt spärliche Arrays standardmäßig als JSON-Objekte statt als Arrays. Dies kann in verschiedenen Szenarien zu unerwartetem Verhalten führen.
Ursache der Array-zu-Objekt-Konvertierung
Die JSON-Syntax unterstützt keine Arrays mit fehlenden Indizes. Wenn json_encode auf ein Array mit geringer Dichte stößt, geht es davon aus, dass es sich um ein Objekt handelt, und konvertiert es entsprechend.
Beispiel
Betrachten Sie den folgenden Code:
$a = array( new stdClass, new stdClass, new stdClass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; // First JSON encoding echo json_encode($a) . "\n"; // Unset an element unset($a[1]); // Second JSON encoding echo json_encode($a) . "\n";
Ausgabe
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}] {"0":{"abc":"123"},"2":{"nmo":"567"}}
Bei der ersten Codierung wird das Array wie erwartet in ein JSON-Array konvertiert. Nach dem Deaktivieren von Index 1 führt die zweite Codierung jedoch aufgrund des Problems mit dem spärlichen Array zu einem JSON-Objekt.
Prävention
Um dieses Verhalten zu verhindern und eine konsistente Array-Codierung sicherzustellen , können Sie array_values() verwenden, um das Array neu zu indizieren, bevor Sie es an json_encode übergeben. Dadurch werden alle Lücken im Array entfernt und sichergestellt, dass es von json_encode als Array behandelt wird.
Geänderter Code
echo json_encode(array_values($a)) . "\n";
Dieser geänderte Code kodiert $a immer als ein JSON-Array, unabhängig davon, ob ihm Indizes fehlen oder nicht.
Das obige ist der detaillierte Inhalt vonWarum konvertiert „json_encode' spärliche PHP-Arrays in JSON-Objekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!