(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — Dekodiert eine JSON-Zeichenkette
Konvertiert eine JSON-kodierte Zeichenkette in einen PHP-Wert.
json
Der zu dekodierende json
-String.
Diese Funktion funktioniert nur mit Zeichenketten, die UTF-8-kodiert sind.
Hinweis:
PHP implementiert eine Obermenge von JSON wie im Original » RFC 7159 beschrieben.
associative
Wenn true
, werden JSON-Objekte als assoziative Arrays zurückgegeben. Wenn false
, werden JSON-Objekte als Objekte zurückgegeben. Wenn null
, werden JSON-Objekte als assoziative Arrays oder Objekte zurückgegeben, abhängig davon, ob JSON_OBJECT_AS_ARRAY
in den flags
gesetzt ist.
depth
Die maximale Verschachtelungstiefe der zu dekodierenden Struktur. Der Wert muss größer als 0
sein und kleiner als oder gleich 2147483647
.
flags
Eine Bitmaske von JSON_BIGINT_AS_STRING
, JSON_INVALID_UTF8_IGNORE
, JSON_INVALID_UTF8_SUBSTITUTE
, JSON_OBJECT_AS_ARRAY
, JSON_THROW_ON_ERROR
. Das Verhalten dieser Konstanten ist auf der Seite über die JSON-Konstanten beschrieben.
Gibt den in json
kodierten Wert als entsprechenden PHP-Typ zurück. Ohne Anführungszeichen werden die Werte true
, false
und null
als true
, false
bzw. null
zurückgegeben. Wenn json
nicht dekodiert werden kann oder wenn die kodierten Daten tiefer verschachtelt sind, als es der Parameter für Verschachtelungstiefe erlaubt, wird null
zurückgegeben.
Wenn depth
außerhalb des erlaubten Bereichs liegt, wird ab PHP 8.0.0 ein ValueError ausgelöst, während vorher ein Fehler der Stufe E_WARNING
ausgelöst wurde.
Version | Beschreibung |
---|---|
7.3.0 | Die flags -Konstante JSON_THROW_ON_ERROR wurde hinzugefügt. |
7.2.0 | associative ist nun ein Nullable-Typ. |
7.2.0 | Die flags -Konstanten JSON_INVALID_UTF8_IGNORE und JSON_INVALID_UTF8_SUBSTITUTE wurden hinzugefügt. |
7.1.0 | Ein leerer JSON-Schlüssel ("") kann als leere Objekt-Eigenschaft kodiert werden, anstatt einen Schlüssel mit dem Wert _empty_ zu verwenden. |
Beispiel #1 json_decode()-Beispiele
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
Beispiel #2 Zugriff auf ungültige Objekteigenschaften
Auf Elemente von Objekten, die Zeichen enthalten, welche gemäß den Namenskonventionen von PHP nicht gültig sind (z. B. der Bindestrich), kann durch ein Umschließen des Namens mit geschweiften Klammern und einfachen Anführungszeichen zugegriffen werden.
<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
Beispiel #3 Häufige Fehler bei der Verwendung von json_decode()
<?php
// die folgenden Zeichenketten sind gültiges JavaScript aber kein gültiges JSON
// der Name und der Wert müssen in doppelten Anführungszeichen eingeschlossen werden
// einfache Anführungszeichen sind ungültig
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null
// der Name muss in doppelten Anführungszeichen eingeschlossen werden
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null
// nachfolgende Kommata sind nicht erlaubt
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null
?>
Beispiel #4 Fehler bei der Verwendung von depth
<?php
// Einige Daten mit einer maximalen Tiefe von 4
// (array -> array -> array -> string) kodieren
$json = json_encode(
array(
1 => array(
'englisch' => array(
'One',
'January'
),
'französisch' => array(
'Une',
'Janvier'
)
)
)
);
// Die Fehler für unterschiedliche Verschachtelungstiefen anzeigen.
var_dump(json_decode($json, true, 4));
echo 'Letzter Fehler: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
var_dump(json_decode($json, true, 3));
echo 'Letzter Fehler: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) { [1]=> array(2) { ["English"]=> array(2) { [0]=> string(3) "One" [1]=> string(7) "January" } ["French"]=> array(2) { [0]=> string(3) "Une" [1]=> string(7) "Janvier" } } } Letzter Fehler: No error NULL Letzter Fehler: Maximum stack depth exceeded
Beispiel #5 json_decode() von großen Ganzzahlen
<?php
$json = '{"number": 12345678901234567890}';
var_dump(json_decode($json));
var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(stdClass)#1 (1) { ["number"]=> float(1.2345678901235E+19) } object(stdClass)#1 (1) { ["number"]=> string(20) "12345678901234567890" }
Hinweis:
Die JSON-Spezifikation ist kein JavaScript, sondern eine Teilmenge davon.
Hinweis:
Tritt ein Dekodierungsfehler auf, kann json_last_error() verwendet werden, um die exakte Art des Fehlers zu ermitteln.