json_decode

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

json_decodeDécode une chaîne JSON

Description

json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] ) : mixed

Récupère une chaîne encodée JSON et la convertit en une variable 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.

assoc

Lorsque ce paramètre vaut TRUE, les objets retournés seront converti en des tableaux associatifs.

depth

Définit la profondeur de récursion.

options

Masque de bit compris 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écrite sur la page des constantes JSON.

Valeurs de retour

Retourne la valeur encodée dans le paramètre json dans le type PHP approprié. Les valeurs 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 de récursion fournie.

Historique

Version Description
7.3.0 L'options JSON_THROW_ON_ERROR a été ajouté.
7.2.0 Les options JSON_INVALID_UTF8_IGNORE, et JSON_INVALID_UTF8_SUBSTITUTE ont été ajouté.
7.1.0 Une clé JSON vide ("") peut être encodée dans la propriété d'objet vide au lieu d'utiliser une clé avec la valeur _empty_.
7.0.0 Rejet des formats de nombre incompatibles avec RFC 7159 - niveau supérieur (07, 0xff, .1, -.1) et tous les niveaux ([1.], [1.e1])
7.0.0 Une chaîne ou une valeur PHP vide qui après casting en string est une chaîne vide (null, false) entraîne une erreur de syntaxe JSON.
5.6.0 Les variantes invalides qui ne sont pas en minuscule de true, false et null ne sont plus acceptées comme entrées valides, et vont générer des alertes.
5.4.0 Les options JSON_BIGINT_AS_STRING, et JSON_OBJECT_AS_ARRAY ont été ajouté.
5.4.0 Le paramètre options a été ajouté.
5.3.0 Ajout du paramètre optionnel depth. La profondeur de récursion par défaut a augmenté de 128 à 512
5.2.3 La limite a été élevée de 20 à 128
5.2.1 Ajout du support du décodage JSON des types basiques.

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($jsontrue));

?>

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 (i.e. le trait d'union) peut être effectué en encapsulant le nom de l'élément avec des crochets et des apostrophes.

<?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.
$json json_encode(
    array(
        
=> array(
            
'English' => array(
                
'One',
                
'January'
            
),
            
'French' => array(
                
'Une',
                
'Janvier'
            
)
        )
    )
);

// Définition des erreurs
$constants get_defined_constants(true);
$json_errors = array();
foreach (
$constants["json"] as $name => $value) {
 if (!
strncmp($name"JSON_ERROR_"11)) {
  
$json_errors[$value] = $name;
 }
}

// Affichage des erreurs pour les différentes profondeurs.
foreach (range(43, -1) as $depth) {
    
var_dump(json_decode($jsontrue$depth));
    echo 
'Dernière erreur : '$json_errors[json_last_error()], PHP_EOLPHP_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(2) "Un"
      [1]=>
      string(7) "Janvier"
    }
  }
}
Dernière erreur : JSON_ERROR_NONE

NULL
Dernière erreur : JSON_ERROR_DEPTH

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

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

var_dump(json_decode($json));
var_dump(json_decode($jsonfalse512JSON_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 ne fait pas partie de Javascript mais d'un sous-projet de Javascript.

Note:

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

Voir aussi