Arbeiten mit JSON in PHP: Parsing und Serialisierung von Daten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum PHP JSON braucht

JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das sich zum De-facto-Standard für Web-APIs, Konfigurationsdateien und die Speicherung strukturierter Informationen entwickelt hat. Trotz seines Ursprungs in JavaScript wird JSON in allen modernen Programmiersprachen, einschließlich PHP, hervorragend unterstützt.

In PHP ist die Arbeit mit JSON nativ über zwei Schlüsselfunktionen implementiert: json_encode() (Serialisierung – Umwandlung von PHP-Daten in einen JSON-String) und json_decode() (Deserialisierung – Parsen eines JSON-Strings zurück in PHP-Strukturen). In diesem Artikel werden wir im Detail besprechen, wie man diese Werkzeuge effektiv einsetzt, Fehler behandelt und JSON in realen Projekten anwendet.



1. Datenserialisierung: Die Funktion json_encode()

Die Funktion json_encode() wandelt einen PHP-Wert (Array, Objekt, String, Zahl) in einen String im JSON-Format um. Dies ist notwendig, wenn Sie Daten an einen Client senden (z. B. über AJAX) oder in einer Datei speichern möchten.



Grundlegende Syntax und Beispiele

<?php// Einfaches Array$colors = ["red", "green", "blue"];echo json_encode($colors);// Ausgabe: ["red","green","blue"]

// Assoziatives Array$user = [ "name" => "Ivan", "age" => 30, "is_admin" => false];echo json_encode($user);// Ausgabe: {"name":"Ivan","age":30,"is_admin":false}?>


Nützliche Flags für json_encode()

Die Funktion unterstützt einen zweiten Parameter – eine Bitmaske von Flags. Betrachten wir die nützlichsten:

  • JSON_PRETTY_PRINT – formatiert die Ausgabe mit Einzügen für bessere Lesbarkeit.
  • JSON_UNESCAPED_UNICODE – maskiert kyrillische und andere Unicode-Zeichen nicht (sonst werden russische Buchstaben zu \\uXXXX).
  • JSON_NUMERIC_CHECK – wandelt Strings, die Zahlen enthalten, in den numerischen Typ um.
  • JSON_FORCE_OBJECT – wandelt ein Array zwangsweise in ein Objekt um, auch bei indizierten Arrays.


<?php$data = ["name" => "Anna", "age" => "25"];

// Ohne Flagsecho json_encode($data);// {"name":"\\u0410\\u043d\\u043d\\u0430","age":"25"}

// Mit Flagsecho json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);/*{ "name": "Anna", "age": "25"}*/?>


2. JSON parsen: Die Funktion json_decode()

Die Funktion json_decode() führt die umgekehrte Operation aus – sie wandelt einen JSON-String zurück in eine PHP-Variable. Standardmäßig gibt sie ein Objekt der Klasse stdClass zurück, aber Sie können auch ein assoziatives Array anfordern.



Parsen in ein Objekt und in ein Array

<?php$jsonString = '{"name":"Peter","age":28,"skills":["PHP","MySQL"]}';

// Standardmäßig – Objekt$obj = json_decode($jsonString);echo $obj->name; // Peterecho $obj->skills[0]; // PHP

// Mit Flag true – assoziatives Array$arr = json_decode($jsonString, true);echo $arr["name"]; // Peterecho $arr["skills"][1]; // MySQL?>


Rekursionstiefe

Der dritte Parameter depth begrenzt die Verschachtelungstiefe. Standardmäßig sind es 512 Ebenen. Dies ist ein Schutz vor Angriffen wie dem "Billion Laughs Attack":

<?php$malicious = '{"a":{"b":{"c":"d"}}}';$result = json_decode($malicious, false, 2); // Maximal 2 Ebenen// Gibt null zurück, da die Tiefe überschritten wurde?>


3. Fehlerbehandlung bei der Arbeit mit JSON

Eines der häufigsten Probleme ist ein ungültiger JSON-String. PHP wirft bei einem Parsing-Fehler keine Exception, sondern gibt null zurück. Um zu verstehen, was schiefgelaufen ist, verwenden Sie die Funktionen json_last_error() und json_last_error_msg().



Fehlerprüfung

<?php$badJson = '{"name": "Fehler, ohne Anführungszeichen}';$data = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON-Fehler: " . json_last_error_msg();?>

Blogs

Buchempfehlungen