Arbeiten mit JSON in PHP: Parsing und Serialisierung in der Praxis
JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat, das zum Standard für Web-APIs und Konfigurationsdateien geworden ist. In PHP ist die Arbeit mit JSON nativ implementiert und erfordert keine Installation zusätzlicher Erweiterungen. In diesem Artikel werden wir anhand praktischer Beispiele erläutern, wie man JSON in PHP parst und serialisiert, und außerdem lernen, Fehler zu behandeln und mit verschachtelten Strukturen zu arbeiten.
Was sind Serialisierung und Parsing von JSON?
Bevor wir zum Code übergehen, definieren wir die Schlüsselbegriffe:
- Serialisierung — Umwandlung einer PHP-Variable (Array, Objekt) in einen JSON-String.
- Parsing (Deserialisierung) — der umgekehrte Prozess: Umwandlung eines JSON-Strings in eine PHP-Variable.
PHP stellt zwei Hauptfunktionen für diese Aufgaben bereit: json_encode() und json_decode(). Schauen wir sie uns genauer an.
Serialisierung von Daten in JSON mit json_encode()
Die Funktion json_encode() nimmt einen PHP-Wert (außer Ressourcen) entgegen und gibt seine JSON-Darstellung zurück. Betrachten wir ein einfaches Beispiel:
<?php$user = [ 'name' => 'Ivan Petrov', 'age' => 28, 'email' => 'ivan@example.com', 'is_active' => true];
$json = json_encode($user);echo $json;// Ausgabe: {"name":"Ivan Petrov","age":28,"email":"ivan@example.com","is_active":true}?>Standardmäßig wandelt json_encode() assoziative Arrays in JSON-Objekte um. Wenn Sie ein Array erhalten möchten, verwenden Sie das Flag JSON_FORCE_OBJECT:
<?php$numbers = [10, 20, 30];echo json_encode($numbers); // [10,20,30]echo json_encode($numbers, JSON_FORCE_OBJECT); // {"0":10,"1":20,"2":30}?>Nützliche Flags für json_encode()
JSON_PRETTY_PRINT— formatiert die Ausgabe mit Einrückungen für bessere Lesbarkeit.JSON_UNESCAPED_UNICODE— maskiert Unicode-Zeichen (z. B. kyrillische Buchstaben) nicht.JSON_NUMERIC_CHECK— wandelt Strings, die Zahlen enthalten, in den numerischen Typ um.
<?php$data = ['product' => 'Buch', 'price' => '1500'];
// Schöne Ausgabe mit kyrillischen Zeichenecho json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);/*{ "product": "Buch", "price": "1500"}*/
// Automatische Umwandlung des Strings '1500' in eine Zahlecho json_encode($data, JSON_NUMERIC_CHECK);// {"product":"Buch","price":1500}?>Parsing von JSON in PHP mit json_decode()
Die Funktion json_decode() nimmt einen JSON-String entgegen und wandelt ihn in eine PHP-Variable um. Der zweite Parameter $associative bestimmt, ob ein assoziatives Array (true) oder ein Objekt (false, Standard) zurückgegeben werden soll.
<?php$jsonString = '{"name":"Maria","age":25,"hobbies":["lesen","reisen"]}';
// Parsing in ein Objekt$obj = json_decode($jsonString);echo $obj->name; // Mariaecho $obj->hobbies[0]; // lesen
// Parsing in ein assoziatives Array$arr = json_decode($jsonString, true);echo $arr['age']; // 25?>Arbeiten mit verschachtelten Strukturen
JSON enthält oft verschachtelte Objekte und Arrays. Betrachten wir ein Beispiel mit einer Wetter-API:
<?php$weatherJson = '{ "city": "Moskau", "temperature": { "current": -5, "feels_like": -8 }, "forecast": [ {"day": "Mo", "temp": -3}, {"day": "Di", "temp": -1} ]}';
$weather = json_decode($weatherJson, true);
echo "Aktuelle Temperatur: " . $weather['temperature']['current'] . "°C";echo "Gefühlt wie: " . $weather['temperature']['feels_like'] . "°C";
foreach ($weather['forecast'] as $day) { echo "{$day['day']}: {$day['temp']}°C";}?>