json_decodeDécode une chaîne JSON
&reftitle.description;
mixedjson_decodestringjsonboolnullassociative&null;intdepth512intflags0
Récupère une chaîne encodée JSON et la convertit en une variable PHP.
&reftitle.parameters;
json
La &string; json à décoder.
Cette fonction ne fonctionne qu'avec des chaînes encodées en UTF-8.
&json.implementation.superset;
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.
flags
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.
&reftitle.returnvalues;
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
d'imbrication fournie.
&reftitle.changelog;
&Version;&Description;7.3.0
Le flagsJSON_THROW_ON_ERROR a été ajouté.
7.2.0
Le paramètre associative est désormais nullable.
7.2.0
Les flagsJSON_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_.
&reftitle.examples;
Exemple avec json_decode
]]>
&example.outputs;
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)
}
]]>
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.
{'foo-bar'}; // 12345
?>
]]>
Erreurs habituelles lors de l'utilisation de la fonction json_decode
]]>
Erreurs avec le paramètre depth
array -> array -> string)
$json = json_encode(
array(
1 => 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;
}
}
$json = json_encode(
array(
1 => array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);
// Affichage des erreurs pour des niveau d'imbrication différentes.
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;
?>
]]>
&example.outputs;
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 avec json_decode et de gros entiers
]]>
&example.outputs;
float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
["number"]=>
string(20) "12345678901234567890"
}
]]>
&reftitle.notes;
La spécification JSON ne fait pas partie de Javascript
mais d'un sous-projet de Javascript.
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.
&reftitle.seealso;
json_encodejson_last_error