(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.