Heim  >  Artikel  >  Backend-Entwicklung  >  Warum konvertiert „json_encode' Sparse-Arrays in JSON-Objekte?

Warum konvertiert „json_encode' Sparse-Arrays in JSON-Objekte?

Susan Sarandon
Susan SarandonOriginal
2024-11-25 08:55:12765Durchsuche

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

Grundlegendes zur JSON-Kodierung von Sparse-Arrays

Bei der JSON-Kodierung sind Sparse-Arrays (Arrays mit fehlenden Indexwerten) eine Anomalie. Dies liegt daran, dass die Array-Syntax von JSON keine Indizes unterstützt, sodass es unmöglich ist, solche Arrays direkt darzustellen.

Frage:

Warum codiert json_encode ein spärliches Array als JSON? Objekt statt eines Array?

Antwort:

Das Verhalten von json_encode bei spärlichen Arrays ergibt sich aus der Unfähigkeit von JSON, solche Arrays auszudrücken. Wenn json_encode auf ein Array mit geringer Dichte stößt, kodiert es es als JSON-Objekt, um die Schlüssel-Wert-Paare des Arrays beizubehalten.

Beispiel:

Bedenken Sie PHP Code:

$a = array(
    new stdclass,
    new stdclass,
    new stdclass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

echo json_encode($a) . "\n";
unset($a[1]);
echo json_encode($a) . "\n";

Ausgabe:

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}

Erklärung:

  • In der ersten Codierung Das Sparse-Array wird als gültiges JSON-Array mit drei Objekten dargestellt.
  • Nach dem Deaktivieren von Index 1, Das Sparse-Array enthält eine Lücke, die json_encode dazu zwingt, es in ein JSON-Objekt zu konvertieren, um die Zuordnung zwischen Schlüsseln und Werten aufrechtzuerhalten.

Lösung:

An Um die Kodierung eines spärlichen Arrays als Objekt zu verhindern, können Sie array_values($a) verwenden, um ein neu indiziertes Array ohne Lücken zu erhalten. json_encode kodiert dies dann ordnungsgemäß als JSON-Array.

Das obige ist der detaillierte Inhalt vonWarum konvertiert „json_encode' Sparse-Arrays in JSON-Objekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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