Décode une chaîne JSON

# json_decode

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

json_decode — Décode une chaîne JSON

### Description

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

Récupère une chaîne encodée JSON et la convertit en une valeur de PHP.

### Liste de paramètres

`json`

  La chaîne de caractères `json` à décoder.

  Cette fonction ne fonctionne qu'avec des chaînes encodées en UTF-8.

  > Note: PHP implémente un sur-ensemble de JSON tel que spécifié dans la » RFC 7159 originale.

`associative`

  Lorsque ce paramètre vaut `true`, les objets JSON seront retournés comme tableaux associatifs ; lorsque ce paramètre vaut `false`, les objets JSON seront retournés comme des objets. Lorsque ce paramètre vaut `null`, les objets JSON seront retournés comme des tableaux associatifs ou des objets, suivant si la constante `JSON_OBJECT_AS_ARRAY` a été définie dans le paramètre `flags`.

`depth`

  Profondeur d'imbrication maximale de la structure en cours de décodage. La valeur doit être supérieure à `0`, et inférieure ou égale à `2147483647`.

`flags`

  Masque de bit composé de `JSON_BIGINT_AS_STRING`, `JSON_INVALID_UTF8_IGNORE`, `JSON_INVALID_UTF8_SUBSTITUTE`, `JSON_OBJECT_AS_ARRAY`, `JSON_THROW_ON_ERROR`. Le comportement de ces constantes est décrit sur la page des constantes JSON.

### Valeurs de retour

Retourne la valeur décodée dans le paramètre `json` dans le type PHP approprié. Les valeurs sans guillemets `true`, `false` et `null` sont retournées respectivement comme `true`, `false` et `null`. `null` est retourné si le paramètre `json` n'a pu être décodé ou si les données encodées sont plus profondes que la limite d'imbrication fournie.

### Erreurs / Exceptions

Si `depth` est en dehors de la plage autorisée, une ValueError est lancée à partir de PHP 8.0.0, alors qu'auparavant, une erreur de niveau `E_WARNING` était lancée.

### Historique

Version | Description
--- | ---
7.3.0 | Le `flags` `JSON_THROW_ON_ERROR` a été ajouté.
7.2.0 | Le paramètre `associative` est désormais nullable.
7.2.0 | Les `flags` `JSON_INVALID_UTF8_IGNORE`, et `JSON_INVALID_UTF8_SUBSTITUTE` ont été ajoutés.
7.1.0 | Une clé JSON vide ("") peut être décodée dans la propriété d'objet vide au lieu d'utiliser une clé avec la valeur `_empty_`.

### Exemples

Exemple #1 Exemple avec json_decode()

    <?php
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, true));

    ?>

L'exemple ci-dessus va afficher :

    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)
    }

Exemple #2 Accès à des propriétés d'objet invalides

Accéder à des éléments d'un objet qui contiennent des caractères non permis par la convention de nommage de PHP (c.-à-d. le trait d'union) peut être effectué en encapsulant le nom de l'élément avec des accolades et l'apostrophe.

    <?php

    $json = '{"foo-bar": 12345}';

    $obj = json_decode($json);
    print $obj->{'foo-bar'}; // 12345

    ?>

Exemple #3 Erreurs habituelles lors de l'utilisation de la fonction json_decode()

    <?php

    // Les chaînes suivantes sont valides en JavaScript mais pas en JSON

    // Le nom et la valeur doivent être entourés de guillemets doubles.
    // Les guillemets simples ne sont pas valides.
    $bad_json = "{ 'bar': 'baz' }";
    json_decode($bad_json); // null

    // Le nom doit être entouré de guillemets doubles.
    $bad_json = '{ bar: "baz" }';
    json_decode($bad_json); // null

    // La virgule de fin n'est pas autorisée.
    $bad_json = '{ bar: "baz", }';
    json_decode($bad_json); // null

    ?>

Exemple #4 Erreurs avec le paramètre `depth`

    <?php
    // Encodage des données avec un niveau d'imbrication maximal de 4 (array -> array -> array -> string)
    $json = json_encode(
        array(
            1 => array(
                'English' => array(
                    'One',
                    'January'
                ),
                'French' => array(
                    'Une',
                    'Janvier'
                )
            )
        )
    );

    // Affichage des erreurs pour des niveaux d'imbrication différents.
    var_dump(json_decode($json, true, 4));
    echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;

    var_dump(json_decode($json, true, 3));
    echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
    ?>

L'exemple ci-dessus va afficher :

    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"
        }
      }
    }
    Last error: No error

    NULL
    Last error: Maximum stack depth exceeded

Exemple #5 Exemple avec json_decode() et de gros entiers

    <?php
    $json = '{"number": 12345678901234567890}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

    ?>

L'exemple ci-dessus va afficher :

    object(stdClass)#1 (1) {
      ["number"]=>
      float(1.2345678901235E+19)
    }
    object(stdClass)#1 (1) {
      ["number"]=>
      string(20) "12345678901234567890"
    }

### Notes

> Note:

> La spécification JSON n'est pas du JavaScript, mais un sous-ensemble de JavaScript.

> Note:

> Si une erreur survient lors du décodage, la fonction json_last_error() pourra être utilisée pour déterminer la nature exacte de l'erreur.

### Voir aussi

- json_encode() - Retourne la représentation JSON d'une valeur
- json_last_error() - Retourne la dernière erreur JSON
- json_last_error_msg() - Retourne le message de la dernière erreur survenue lors de l'appel à la fonction json_validate(), json_encode() ou json_decode()

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