JSON und PHP

vorige Präsentation: JSON und JavaScript | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Web Security

Serialisierung

Der PHP Befehl lautet json_encode.

Welche Datenstrukturen von PHP lassen sich zu JSON serialisieren?

encode

Objekt

Ein PHP Objekt lässt sich als JSON Objekt darstellen:

$object = new stdClass();
$object->name = "Alice";
$object->foo = 30;
echo json_encode( $object );
// {"foo":30,"name":"Alice"}

Array

Ein “normales” Array mit Integer als Index lässt sich direkt auf JSON abbilden:

$array = array( "Apple", "Banana" );
echo json_encode( $array );
// ["Apple","Banana"]

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" => 30, "name" => "Alice");
echo json_encode( $array );
// {"foo":30,"name":"Alice"}

In JSON gibt es keine Entsprechung für das Assoziative Array in PHP. Deswegen wird es als Objekt dargestellt.

Deserialisierung

Wie sollen nun JSON-Objekt zu PHP übersetzt werden? Als Objekt oder als Assoziatives Array?

decode

Hier gibt es zwei Varianten, die man über das zweite Argumente von json_decode unterscheidet.

decode false

false als zweites Argument oder gar kein zweites Argument bewirkt, dass alle JSON-Objekte zu PHP-Objekten übersetzt werden

$string = '{"name":"Alice"}';
$o = json_decode( $string );
var_export( $o );
//  stdClass Object
//  (
//    [name] => Alice
//  )
echo "Wert von name: " . $o->name;
// Alice

decode true

true als zweites Argument bewirkt, dass alle Objekte als assoziative Arrays decodiert werden.

$string = '{"name":"Alice"}';
$o = json_decode( $string, true );
print_r( $o );
// Array
// (
//   [name] => "Alice"
// )
echo "Wert von name: " . $o['name'];
// Alice

JSON als Rückgabewert

Normalerweise liefert ein PHP Programm als Output HTML. Wenn man statt dessen JSON ausliefern will muss man den HTTP-Header ‘Content-Type’ und eventuell den HTTP Response Code entsprechend setzen.

header("Content-type: application/json; charset=utf-8");
http_response_code(200);
echo json_encode($data);

Aus einer JSON Datei

Mit dem Befehl file_get_contents kann man den gesamten Inhalt einer Datei lesen:

$string_or_false = file_get_contents('some_data.json');
if($string_or_false == false) {
  echo "Error reading file";
  exit();
}
$data = json_decode($string, true);

Referenz

JSON und PHP

vorige Präsentation: JSON und JavaScript | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Web Security

/

#