JSON und PHP
als Präsentation ▻Die PHP Datenstrukturen passen nicht gut zu JSON, deswegen gibt es beim Serialisieren zu JSON Probleme.
▻Objekt
Ein PHP Objekt lässt sich als JSON Objekt darstellen:
$object = new stdClass(); $object->foo = 10; $object->bar = "zwanzig"; $object->baz = 30; echo json_encode( $object ); // {"foo":10,"bar":"zwanzig","baz":30}
Array
Ein “normales” Array mit Integer als Index lässt sich direkt auf JSON abbilden:
$array = array( "a", "b", "c" ); echo json_encode( $array ); // ["a","b","c"]
Assoziatives Array
Jedes Array kann in PHP auch Strings als Index enthalten. Ist das der Fall, dann wird es in JSON als Objekt dargestellt:
$array = array( "foo" => 10, "bar" => 30, "baz" => 30); $array[0] = "a"; echo json_encode( $array ); // {"foo":10,"bar":30,"baz":30,"0":"a"}
In JSON gibt es keine entsprechung für das Assoziative Array in PHP. Deswegen wird es als Objekt dargestellt. Wenn man dieses Objekt wieder in JSON zurück wandelt erhält man aber ein PHP Objekt mit einer Property “0”:
$array = array( "foo" => 10, "bar" => 30, "baz" => 30, 0 => "a"); $string = json_encode( $array ); // {"foo":10,"bar":30,"baz":30,"0":"a"} $o = json_decode( $string ); print_r( $o ); // stdClass Object // ( // [foo] => 10 // [bar] => 30 // [baz] => 30 // [0] => a // ) echo "Wert von foo: " . $o->foo; echo "Wert von 0: " . $o->{'0'};
Im zweiten Argument von json_decode
kann man angeben ob
alle Objekte als Assoziative Arrays decodiert werden sollen:
$string = '{"foo":10,"bar":30,"baz":30,"0":"a"}'; $o = json_decode( $string, true ); print_r( $o ); // Array // ( // [foo] => 10 // [bar] => 30 // [baz] => 30 // [0] => a // ) echo "Wert von foo: " . $o['foo']; echo "Wert von 0: " . $o[0];