Websiteentwicklung: PHP: JSON
JSON unter PHP
[Bearbeiten]JSON ist ein Standardformat zur Objektserialisierung. Es dient dazu, Objekte mit möglichst wenig Aufwand von einem System an ein anderes zu übertragen, und ist neben XML eines der derzeit beliebtesten Serialisierungsformate. Es findet oftmals Einsatz als Schnittstellenformat in HTTP-basierenden APIs und ist deswegen für PHP-Programmierer, die solche Dienste in ihre eigenen Webangebote integrieren möchten, von hoher Relevanz.
PHP-Objekte in JSON umwandeln
[Bearbeiten]Um ein PHP-Objekt in einen JSON-Objektstring umzuwandeln unterstuetzt PHP die Methode json_encode
. Was hierbei geschieht betrachten wir an einem kleinen Beispiel.
Nehmen wir an, wir haben eine Klasse in PHP, die Personen abbildet, und erstellen wir ein konkretes Person-Objekt:
class Person {
public $firstname = "wiki"; //Vorname
public $lastname = "books"; //Nachname
public $age = 20; //Alter
public $pet = true; //Hat Haustier?
}
$testperson1 = new Person("wiki","books",21,true); // Erstelle eine Person, die Wiki Books heisst, 21 Jahre alt ist und ein Haustier hat.
dann koennten wir das PHP-Objekt $testperson1
folgendermassen in einen JSON-Objektstring umwandeln:
$testperson1_json = json_encode(get_object_vars($testperson1)); // Wandle $testperson1 in JSON um und speichere Ergebnis in $testperson1_json
$testperson1_json
haette nun folgenden Inhalt:
{"firstname":"wiki","lastname":"books","age":21,"pet":true}
Wie wir sehen, wurden alle Attribute des Objekts $testperson1
in die JSON-Repraesentation uebernommen, allerdings erst, nachdem wir uns mittels get_object_vars
die Attribute des Objekts in einem assoziativen Array gespeichert haben. Wichtig ist: json_encode kann bis auf Objekte alle PHP bekannten Datenstrukturen (Array und assoziatives Array) in JSON-Objektstrings umwandeln. Das funktoniert auch, wenn die Datenstrukturen verschachtelt sind.
JSON in PHP-Objekte umwandeln
[Bearbeiten]Um einen JSON-String in ein PHP-Objekt umzuwandeln stellt PHP die Funktion json_decode
zur Verfuegung. Ihr Einsatz sieht aus wie folgt:
$json = '{"testattribut1":"hello world","testattribut2":1337,"testattribut3":true}';
$object = json_decode($json);
$object
Enthaelt nun ein generisches PHP-Objekt mit drei Attributen $object->testattribut1
, $object->testattribut2
und $object->testattribut3
, die jeweils einen string, einen integer und einen booleschen Wert enthalten.
Es kann in manchen Situationen sinnvoll sein, einen JSON-String nicht in ein Objekt umwandeln zu lassen, sondern in ein assoziatives Array. Das geht folgendermaßen:
$json = '{"testattribut1":"hello world","testattribut2":1337,"testattribut3":true}';
$array = json_decode($json,true);
$array
enthaelt jetzt ein assoziatives Array mit drei Key-Value-Paaren: $array['testattribut1']
, $array['testattribut2']
und $array['testattribut3']
.