json_decode
(PHP 5 >= 5.2.0, PHP 7, PECL json >= 1.2.0)
json_decode — Décode une chaîne JSON
Description
$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.
Liste de paramètres
-
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 7159 originale.
-
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, il existe deux options prises en charge. Le premier est
JSON_BIGINT_AS_STRING
qui permet de caster les gros entiers en string au lieu de nombre décimaux qui est la valeur par défaut. La deuxième option estJSON_OBJECT_AS_ARRAY
qui a le même effet que la définition deassoc
surTRUE
.
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.
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 (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(
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;
}
}
// Affichage des 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(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($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 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.
Historique
Version | Description |
---|---|
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 |
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. |
Voir aussi
- json_encode() - Retourne la représentation JSON d'une valeur
- json_last_error() - Retourne la dernière erreur JSON
Version en cache
25/11/2024 09:46:29 Cette version de la page est en cache (à la date du 25/11/2024 09:46:29) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-json-decode.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.