vorige Präsentation: JSON und JavaScript | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Web Security
Die Befehle json_encode und json_decode sind teil der JSON Extension.
In phpinfo() kann man sehen ob diese Extension aktiviert ist:

Nicht alles was in JavaScript möglich ist wird in PHP als JSON akzeptiert.
In Javascript müssen attribute nicht in Anführungszeichen stehen:
{
prop1 : "Schokolade",
prop2 : 42,
}
Wenn JSON als Austauschformat zwischen Sprachen verwendet wird, dann müssen alle Attribute in Anführungszeichen stehen:
{
"prop1" : "Schokolade",
"prop2" : 42,
}
In Javascript kann ein Wert in JSON-Schreibweise auch Funktionen enthalten:
{
'prop1' : 'Schokolade',
'prop2' : 42,
'method_1' : function (x) { return x + ' ist schlecht' },
'method_2' : x => x + ' ist gut'
}
Wenn JSON als Austauschformat zwischen Sprachen verwendet wird darf es keine Funktionen enthalten.
$json_string = "{
'prop1' : 'Schokolade',
'prop2' : 42,
'method_1' : function (x) { return x + ' ist schlecht' },
'method_2' : x => x + ' ist gut'
}";
$data = json_decode($json_string);
if( $data == null ) {
echo json_last_error_msg(); // Output: "Syntax Error"
exit();
}
In PHP wird das gesamte JSON-Objekt verworfen, der Rückgabewert ist null
und json_last_error_msg() gibt “Syntax Error” zurück.
Der PHP Befehl lautet json_encode.
Welche Datenstrukturen von PHP lassen sich zu JSON serialisieren?
Ein PHP Objekt lässt sich als JSON Objekt darstellen:
$object = new stdClass();
$object->foo = 30;
$object->name = "Alice";
echo json_encode( $object );
// {"foo":30,"name":"Alice"}
Ein “normales” Array mit Integer als Index lässt sich direkt auf JSON abbilden:
$array = array( "Apple", "Banana" );
echo json_encode( $array );
// ["Apple","Banana"]
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.
Wie sollen nun JSON-Objekt zu PHP übersetzt werden? Als Objekt oder als Assoziatives Array?
Hier gibt es zwei Varianten, die man über das zweite Argumente von json_decode unterscheidet.
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
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
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);
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);
vorige Präsentation: JSON und JavaScript | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Web Security
/
#