(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_decode — Décode une chaîne JSON
$json
[, bool $assoc
= false
[, int $depth
= 512
[, int $options
= 0
]]] )Récupère une chaîne encodée JSON et la convertit en une variable PHP.
json
La chaîne json
à décoder.
Cette fonction ne traite qu'avec des chaînes encodées avec UTF-8.
Note:
PHP implémente un sur-ensemble de JSON tel que spécifié dans la » RFC 4627 originale - il va aussi encoder et décoder les types scalaires et
NULL
. RFC 4627 supporte uniquement ces valeurs que lorsqu'elles sont comprises dans un tableau ou un objet.De plus, ce sur-ensemble est compatible avec la définition étendu d'un "texte JSON" dans la nouvelle » RFC 7159 (qui a pour but de remplacer la RFC 4627) et » ECMA-404, ceci peut provoquer des problèmes d'interopérabilité avec de vieux parseurs JSON qui respectent strictement la RFC 4627 lors de l'encodage d'une valeur scalaire seule.
assoc
Lorsque ce paramètre vaut TRUE
, l'objet retourné sera converti en un
tableau associatif.
depth
Définit la profondeur de récursion.
options
Un masque d'options JSON decode. Actuellement,
seul JSON_BIGINT_AS_STRING
est supporté (par défaut, les gros entiers sont convertis
en nombres à virgule flottante)
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.
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 (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 entourrés de double-guillemets.
// Les simple-guillements ne sont pas valides
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null
// le nom doit être entourré de double-guillemets
$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
// Encode les données.
$json = json_encode(
array(
1 => array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);
// Définie les 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;
}
}
// Affiche les erreurs pour les différentes profondeurs.
foreach (range(4, 3, -1) as $depth) {
var_dump(json_decode($json, true, $depth));
echo 'Dernière erreur : ', $json_errors[json_last_error()], 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" } } } 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($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" }
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() pourra être utilisée pour déterminer la nature exacte de l'erreur.
Version | Description |
---|---|
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 |
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. |