json_decode
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — Dekodiert eine JSON-Zeichenkette
Beschreibung
Konvertiert eine JSON-kodierte Zeichenkette in eine PHP-Variable.
Parameter-Liste
-
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. Wennfalse
, werden JSON-Objekte als Objekte zurückgegeben. Wennnull
, werden JSON-Objekte als assoziative Arrays oder Objekte zurückgegeben, abhängig davon, obJSON_OBJECT_AS_ARRAY
in denflags
gesetzt ist. -
depth
-
Die maximale Verschachtelungstiefe der zu dekodierenden Struktur.
-
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.
Rückgabewerte
Gibt den Wert von json
im passenden PHP-Typ zurück.
Die Werte true
, false
und
null
werden entsprechend als true
, false
und null
zurückgegeben. null
wird zurückgegeben, wenn der Parameter
json
nicht dekodiert werden kann oder wenn die
dekodierten Daten tiefer verschachtelt sind, als es der Parameter für
Verschachtelungstiefe erlaubt.
Changelog
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.
|
Beispiele
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" }
Anmerkungen
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.
Siehe auch
- json_encode() - Liefert die JSON-Darstellung eines Wertes
- json_last_error() - Gibt den letzten aufgetretenen Fehler zurück