Arbeiten mit JSON in PHP: Vollständige Anleitung zum Parsen und Serialisieren
JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das in der Webentwicklung weit verbreitet ist. PHP bietet leistungsstarke integrierte Funktionen für die Arbeit mit JSON, mit denen Daten problemlos zwischen PHP-Strukturen und JSON-Strings konvertiert werden können. In diesem Artikel werden wir detailliert besprechen, wie man JSON in PHP parst (dekodiert) und serialisiert (kodiert), sowie typische Fehler und deren Behandlung betrachten.
Was ist JSON und warum wird es in PHP benötigt?
JSON ist ein textbasiertes Format, das auf der JavaScript-Syntax basiert. Es wird verwendet, um strukturierte Daten zwischen Server und Client zu übertragen (z. B. in REST-APIs). In PHP ist JSON unverzichtbar bei:
- Datenaustausch mit externen APIs (z. B. Wetterdienste, Zahlungssysteme)
- Speicherung von Konfigurationsdateien
- Serialisierung von Daten für Caching
- Arbeit mit WebSockets und AJAX-Anfragen
PHP unterstützt die Arbeit mit JSON seit Version 5.2.0. Alle notwendigen Funktionen sind im Kern integriert – es müssen keine zusätzlichen Erweiterungen installiert werden.
Serialisierung von Daten in JSON (json_encode)
Die Funktion json_encode() wandelt PHP-Werte (Arrays, Objekte, Strings, Zahlen) in einen JSON-String um. Betrachten wir ein einfaches Beispiel:
<?php// Assoziatives Array$user = [ 'name' => 'Ivan Petrov', 'age' => 28, 'email' => 'ivan@example.com', 'is_active' => true, 'hobbies' => ['programming', 'chess', 'running']];
// Kodieren in JSON$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>Ergebnis der Ausführung:
{ "name": "Ivan Petrov", "age": 28, "email": "ivan@example.com", "is_active": true, "hobbies": [ "programming", "chess", "running" ]}Wichtige Flags von json_encode
JSON_UNESCAPED_UNICODE– erhält kyrillische Zeichen (ohne dieses Flag werden russische Zeichen als \\uXXXX maskiert)JSON_PRETTY_PRINT– formatiert die Ausgabe mit Einrückungen für bessere LesbarkeitJSON_NUMERIC_CHECK– wandelt numerische Strings in Zahlen umJSON_FORCE_OBJECT– erzwingt die Erstellung eines Objekts, auch wenn ein leeres Array übergeben wird
Parsen von JSON in PHP (json_decode)
Die Funktion json_decode() führt die umgekehrte Umwandlung durch – von einem JSON-String in einen PHP-Wert. Standardmäßig gibt sie ein Objekt zurück. Um ein assoziatives Array zu erhalten, übergeben Sie den zweiten Parameter true:
<?php$jsonString = '{"name":"Ivan Petrov","age":28,"email":"ivan@example.com","is_active":true}';
// Dekodieren in ein Objekt$userObject = json_decode($jsonString);echo $userObject->name; // Ivan Petrov
// Dekodieren in ein assoziatives Array$userArray = json_decode($jsonString, true);echo $userArray['name']; // Ivan Petrov?>Verschachtelungstiefe
Der dritte Parameter von json_decode() – depth – begrenzt die Rekursionstiefe. Standardmäßig beträgt sie 512. Dies schützt vor Angriffen wie dem "billion laughs attack":
<?php$deepJson = '{"a":{"b":{"c":{"d":"test"}}}}';$data = json_decode($deepJson, true, 3); // Fehler, wenn Tiefe größer als 3?>Fehlerbehandlung bei der Arbeit mit JSON
Beim Parsen von ungültigem JSON gibt json_decode() null zurück. Um detaillierte Informationen über den Fehler zu erhalten, verwenden Sie json_last_error() und json_last_error_msg():
<?php$badJson = '{"name": "Ivan", age: 28}'; // Fehler: Schlüssel age nicht in Anführungszeichen
$data = json_decode($badJson, true);
if (json_last_error() !== JSON_ERROR_NONE) {