Die json_decode-Funktion in PHP verstehen
Die json_decode-Funktion in PHP wandelt JSON-Strings in native PHP-Werte um. Erfahren Sie mehr über Parameter, Fehlerbehandlung und praktische Beispiele.
Die Funktion json_decode in PHP wandelt einen JSON-formatierten String in einen nativen PHP-Wert um, den Sie lesen und bearbeiten können. Sie ist das Gegenstück zu json_encode, das den umgekehrten Weg geht (PHP-Wert → JSON-String). Sie verwenden json_decode immer dann, wenn Daten als Text ankommen und Sie damit arbeiten müssen: eine REST-API-Antwort, ein Webhook-Payload, eine Konfigurationsdatei oder eine in einer Datenbank gespeicherte Spalte.
Dieses Kapitel behandelt die Signatur der Funktion, den Unterschied zwischen der Dekodierung zu einem Objekt und zu einem assoziativen Array, das Verhalten von verschachtelten Daten, Tiefe und Flag-Optionen sowie den richtigen Umgang mit ungültigen Eingaben.
Was ist JSON?
JSON (JavaScript Object Notation) ist ein leichtgewichtiges, textbasiertes Datenaustauschformat, das für Menschen leicht zu lesen und für Maschinen leicht zu parsen ist. Es stellt Daten als Schlüssel-Wert-Paare (Objekte, geschrieben als {}) und geordnete Listen (Arrays, geschrieben als []) dar, wobei Strings, Zahlen, Boolesche Werte und null als skalare Werte dienen. Da fast jede Sprache JSON produzieren und verarbeiten kann, ist es zum Standardformat für Web-APIs geworden. Einen umfassenden Überblick finden Sie unter PHP und JSON.
Syntax
json_decode(string $json, ?bool $associative = null, int $depth = 512, int $flags = 0): mixed| Parameter | Zweck |
|---|---|
$json | Der zu dekodierende JSON-String. Muss gültiges UTF-8 sein. |
$associative | true → assoziative Arrays zurückgeben; false/null → stdClass-Objekte zurückgeben. |
$depth | Maximal erlaubte Verschachtelungstiefe (Standard 512). Die Dekodierung tieferer Eingaben schlägt fehl. |
$flags | Bitmaske von Optionen, z. B. JSON_THROW_ON_ERROR, JSON_BIGINT_AS_STRING. |
Die Funktion gibt den dekodierten Wert zurück (array, stdClass, string, int, float, bool oder null), oder null bei einem Fehler.
Einen JSON-String dekodieren
Die häufigste Verwendung ist das Dekodieren eines JSON-Objekts. Übergeben Sie true als zweites Argument, um ein PHP-assoziatives Array zurückzuerhalten.
PHP json_decode function example
Hier repräsentiert $json den Namen, das Alter und die Stadt einer Person. Mit true erstellt json_decode ein PHP-Array, sodass das Ergebnis wie folgt aussieht:
Array
(
[name] => John
[age] => 30
[city] => New York
)Sie lesen dann Werte mit Array-Syntax, z. B. $array['name']. Weitere Informationen zu dieser Datenstruktur finden Sie unter assoziative Arrays.
Den zweiten Parameter verwenden
Der zweite Parameter der Funktion json_decode ist optional, wird aber häufig verwendet, um den Typ der zurückgegebenen Variable zu steuern. Wenn der zweite Parameter auf true gesetzt ist, gibt json_decode ein Array zurück. Wenn der zweite Parameter auf false gesetzt ist (der Standard), gibt json_decode ein Objekt zurück.
PHP json_decode function example with objects
Wenn $associative gleich false ist (oder weggelassen wird), gibt json_decode ein stdClass-Objekt zurück. Sie lesen Werte mit der Objekteigenschafts-Syntax $object->name, $object->age und so weiter. Verwenden Sie diese Form, wenn Sie einen objektartigen Zugriff bevorzugen oder wenn das Ergebnis an Code übergeben wird, der Objekte erwartet (siehe PHP-Klassen und Objekte).
Verschachteltes JSON dekodieren
JSON in der Praxis ist meist verschachtelt. json_decode behandelt Verschachtelungen automatisch: Jede Ebene wird zu einem verschachtelten Array (mit true) oder einem verschachtelten Objekt (mit false).
<?php
$json = '{"user":{"name":"John","roles":["admin","editor"]}}';
$data = json_decode($json, true);
echo $data['user']['name']; // John
echo "\n";
echo $data['user']['roles'][0]; // admin
?>Innere JSON-Objekte werden zu inneren Arrays, und JSON-Arrays ([...]) werden zu indizierten PHP-Arrays, über die Sie mit foreach iterieren können.
Fehlerbehandlung
Wenn der an json_decode übergebene Eingabe-String kein gültiges JSON ist, gibt die Funktion null zurück. Allerdings ist null auch ein gültiger JSON-Wert, daher kann die Überprüfung if ($array === null) nicht zwischen einem Dekodierungsfehler und einer erfolgreichen Dekodierung des Literals null unterscheiden. Um Fehler korrekt zu behandeln, prüfen Sie json_last_error() oder verwenden Sie das Flag JSON_THROW_ON_ERROR (PHP 7.3+).
PHP handle json_decode errors
Dem obigen String fehlt ein abschließendes Anführungszeichen, daher ist json_last_error() nicht JSON_ERROR_NONE und die Nachricht erklärt, was schiefgelaufen ist.
Ab PHP 7.3 ist die sauberere Option das Flag JSON_THROW_ON_ERROR, das eine JsonException auslöst, anstatt stillschweigend null zurückzugeben:
<?php
try {
$data = json_decode('{"invalid": }', true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo "Could not decode JSON: " . $e->getMessage();
}
?>Dadurch können Sie fehlerhafte Eingaben mit Standard-try/catch-Blöcken behandeln, anstatt das Ergebnis nach jedem Aufruf manuell zu überprüfen.
Verwandte Funktionen
json_encode— einen PHP-Wert in einen JSON-String umwandeln.- PHP und JSON — Überblick über die Arbeit mit JSON in PHP.
- PHP JSON-Referenz — vollständige Liste der JSON-Funktionen und -Konstanten in PHP.
Fazit
Die Funktion json_decode in PHP ist ein leistungsstarkes Werkzeug für die Arbeit mit JSON-Daten. Sie ist schnell, zuverlässig und einfach zu bedienen. Wenn Sie die Details von json_decode und seinen zweiten Parameter verstehen, können Sie JSON-Strings sicher dekodieren und die resultierenden Daten in Ihren PHP-Anwendungen verwenden.