Dekodiert eine JSON-Zeichenkette

# json_decode

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)

json_decode — Dekodiert eine JSON-Zeichenkette

### Beschreibung

function json_decode(
string `$json`,
?bool `$associative` = `null`,
int `$depth` = 512,
int `$flags` = 0
): mixed

Konvertiert eine JSON-kodierte Zeichenkette in einen PHP-Wert.

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

### Rückgabewerte

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.

### Fehler/Exceptions

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.

### 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
- json_last_error_msg() - Liefert die Fehlermeldung des letzten Aufrufs von json_validate(), json_encode() oder json_decode()

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open