Bei der Kodierung von PHP Objekten nach JSON werden alle öffentlichen Eigenschaften dieses Objektes im JSON Objekt kodiert.
JSON erlaubt keine Objektreferenzen, deshalb sollte dafür Sorge getragen werden, dass keine
Objekte mit rekursiver Referenz kodiert werden. Wenn man Probleme mit Rekursion hat,
erlauben Zend_Json::encode()
und Zend_Json_Encoder::encode()
die
Angabe eines optionalen, zweiten Parameters, um auf Rekursion zu prüfen; wenn ein Objekt
doppelt serialisiert wird, wird eine Ausnahme geworfen.
Das Dekodieren von JSON Objekten stellt eine weitere Schwierigkeit dar, allerdings entsprechen Javascript Objekte sehr einem assoziativen Array in PHP. Einige schlagen vor, dass ein Klassenbezeichner übergeben werden soll und eine Objektinstanz dieser Klasse erstellt und mit den Schlüssel/Wert Paaren des JSON Objektes bestückt werden soll; andere denken, dies könnte ein erhebliches Sicherheitsrisiko darstellen.
Standardmäßig wird Zend_Json
die JSON Objekte als assoziative Arrays
dekodieren. Wenn du allerdings wünscht, dass ein Objekt zurück gegeben wird, kannst du dies
angeben:
<?php // Dekodiere Objekte als Objekte $phpNative = Zend_Json::decode($encodedValue, Zend_Json::TYPE_OBJECT); ?>
Jedes dekodierte Objekte wird als StdClass
Objekt mit Eigenschaften
entsprechend der Schlüssel/Wert Paare der JSON Notation zuürckgegeben.
Die Empfehlung des Zend Framework ist, dass der einzelne Entwickler selber entscheiden
sollte, wie er JSON Objekte dekodiert. Wenn ein Objekt eines bestimmten Typs erstellt werden
soll, kann es im Code des Entwicklers erstellt werden und mit den dekodierten Werten unter
Verwendung von Zend_Json
bestückt werden.