16.3. JSON Objects

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.