Beachten Sie dieses kleine Skript:
$array = array('stuff' => 'things');
print_r($array);
//prints - Array ( [stuff] => things )
$arrayEncoded = json_encode($array);
echo $arrayEncoded . "<br />";
//prints - {"stuff":"things"}
$arrayDecoded = json_decode($arrayEncoded);
print_r($arrayDecoded);
//prints - stdClass Object ( [stuff] => things )
Warum verwandelt PHP das JSON-Objekt in eine Klasse?
Sollte ein Array, das json_encoded
dann ist json_decoded
, nicht das GENAUE gleiche Ergebnis liefern?
gibt Ihnen ein Array.
quelle
Um die eigentliche Frage zu beantworten:
Schauen Sie sich die Ausgabe des codierten JSON genauer an. Ich habe das Beispiel, das das OP gibt, ein wenig erweitert:
Das JSON-Format wurde vom gleichen Standard wie JavaScript ( ECMAScript Programming Language Standard ) abgeleitet. Wenn Sie sich das Format ansehen, sieht es wie JavaScript aus. Es ist ein JSON- Objekt (
{}
= Objekt ) mit einer Eigenschaft "stuff" mit dem Wert "things" und einer Eigenschaft "things", wobei der Wert ein Array von Zeichenfolgen ([]
= array) ist ) ist.JSON (als JavaScript) kennt keine assoziativen Arrays, sondern nur indizierte Arrays.Wenn JSON ein assoziatives PHP-Array codiert, führt dies zu einer JSON-Zeichenfolge, die dieses Array als "Objekt" enthält.
Jetzt dekodieren wir den JSON erneut mit
json_decode($arrayEncoded)
. Die Dekodierungsfunktion weiß nicht, woher diese JSON-Zeichenfolge stammt (ein PHP-Array), daher dekodiert sie in ein unbekanntes ObjektstdClass
in PHP befindet. Wie Sie sehen werden, wird das String-Array "things" in ein indiziertes PHP-Array dekodiert.Siehe auch:
Vielen Dank an https://www.randomlists.com/things für die "Dinge"
quelle
Wie bereits erwähnt, können Sie hier einen zweiten Parameter hinzufügen, um anzugeben, dass ein Array zurückgegeben werden soll:
Viele Leute ziehen es möglicherweise vor, stattdessen die Ergebnisse zu verwenden:
Es könnte klarer zu lesen sein.
quelle
tl; dr: JavaScript unterstützt keine assoziativen Arrays, daher auch nicht JSON.
Immerhin ist es JSON, nicht JSAAN. :) :)
PHP muss also Ihr Array in ein Objekt konvertieren, um es in JSON zu codieren.
quelle
Wenn Sie den JSON in ein Array dekodieren, gehen in dieser Situation Informationen verloren.
quelle
In diesem Blog-Beitrag wird auch eine gute PHP 4-JSON-Codierungs- / Decodierungsbibliothek (die sogar PHP 5-Reverse-kompatibel ist) beschrieben: Verwenden von json_encode () und json_decode () in PHP4 (Juni 2009) .
Der konkrete Code stammt von Michal Migurski und von Matt Knapp:
quelle