Warum konvertiert „json_encode' spärliche PHP-Arrays in JSON-Objekte?

Mary-Kate Olsen
Freigeben: 2024-11-21 07:53:08
Original
672 Leute haben es durchsucht

Why Does `json_encode` Convert Sparse PHP Arrays to JSON Objects?

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";
Nach dem Login kopieren

Ausgabe

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
Nach dem Login kopieren

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";
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage