Ceci est destiné à être une question de référence générale et une réponse couvrant la plupart des interminables "Comment puis-je accéder aux données dans mon JSON?" des questions. Il est ici pour gérer les bases générales du décodage JSON en PHP et de l'accès aux résultats.
J'ai le JSON:
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}
Comment décoder cela en PHP et accéder aux données résultantes?
Réponses:
Intro
Tout d'abord, vous avez une chaîne. JSON n'est pas un tableau, un objet ou une structure de données. JSON est un format de sérialisation textuel - donc une chaîne de fantaisie, mais toujours juste une chaîne. Décodez-le en PHP en utilisant
json_decode()
.Vous y trouverez peut-être:
Ce sont les choses qui peuvent être encodées en JSON. Ou plus précisément, ce sont des versions PHP des choses qui peuvent être encodées en JSON.
Il n'y a rien de spécial en eux. Ce ne sont pas des "objets JSON" ou des "tableaux JSON". Vous avez décodé le JSON - vous avez maintenant des types PHP de base de tous les jours .
Les objets seront des instances de stdClass , une classe intégrée qui est juste une chose générique qui n'est pas importante ici.
Accès aux propriétés des objets
Vous accédez aux propriétés de l'un de ces objets de la même manière que pour les propriétés publiques non statiques de tout autre objet, par exemple
$object->property
.Accès aux éléments du tableau
Vous accédez aux éléments de l'un de ces tableaux de la même manière que pour tout autre tableau, par exemple
$array[0]
.Itérer dessus avec
foreach
.Ou dérangez-vous avec l'une des fonctions de tableau intégrées de bazillion .
Accès aux éléments imbriqués
Les propriétés des objets et les éléments des tableaux peuvent être plus d'objets et / ou de tableaux - vous pouvez simplement continuer à accéder à leurs propriétés et membres comme d'habitude, par exemple
$object->array[0]->etc
.Passer
true
comme deuxième argument à json_decode ()Lorsque vous faites cela, au lieu d'objets, vous obtiendrez des tableaux associatifs - des tableaux avec des chaînes pour les clés. Encore une fois, vous accédez à ses éléments comme d'habitude, par exemple
$array['key']
.Accès aux éléments du tableau associatif
Lors du décodage d'un objet JSON en un tableau PHP associatif, vous pouvez itérer les clés et les valeurs à l'aide de la
foreach (array_expression as $key => $value)
syntaxe, par exempleImpressions
Je ne sais pas comment les données sont structurées
Lisez la documentation pour savoir de quoi vous obtenez le JSON.
Regardez le JSON - où vous voyez des crochets
{}
attendre un objet, où vous voyez des crochets[]
attendre un tableau.Frappez les données décodées avec un
print_r()
:et vérifiez la sortie:
Il vous indiquera où vous avez des objets, où vous avez des tableaux, ainsi que les noms et les valeurs de leurs membres.
Si vous ne pouvez aller aussi loin avant de vous perdre - allez aussi loin et frappez -le avec
print_r()
:Jetez-y un œil dans cet explorateur JSON interactif pratique .
Décomposez le problème en morceaux plus faciles à envelopper la tête.
json_decode()
Retournull
Cela se produit parce que:
null
.json_last_error_msg
ou passez-le par quelque chose comme JSONLint .json_decode()
.Si vous devez modifier la profondeur maximale, vous résolvez probablement le mauvais problème. Découvrez pourquoi vous obtenez des données si profondément imbriquées (par exemple, le service que vous interrogez qui génère le JSON a un bogue) et évitez que cela ne se produise.
Le nom de la propriété d'objet contient un caractère spécial
Parfois, vous aurez un nom de propriété d'objet qui contient quelque chose comme un trait d'union
-
ou un signe@
qui ne peut pas être utilisé dans un identificateur littéral. Au lieu de cela, vous pouvez utiliser un littéral de chaîne entre accolades pour y remédier.Si vous avez un entier comme propriété, voir: Comment accéder aux propriétés des objets avec des noms comme des entiers? comme référence.
Quelqu'un a mis JSON dans votre JSON
C'est ridicule mais ça arrive - il y a du JSON encodé comme une chaîne dans votre JSON. Décodez, accédez à la chaîne comme d'habitude, décodez -le et finissez par obtenir ce dont vous avez besoin.
Les données ne tiennent pas en mémoire
Si votre JSON est trop volumineux pour
json_decode()
être géré immédiatement, les choses commencent à devenir délicates. Voir:Comment trier
Voir: Référence: toutes les méthodes de base pour trier les tableaux et les données en PHP .
la source
Vous pouvez utiliser json_decode () pour convertir une chaîne json en un objet / tableau PHP.
Par exemple.
Contribution:
Production:
Quelques points à retenir:
json_decode
requiert que la chaîne soit validejson
sinon elle sera renvoyéeNULL
.json_last_error()
peut être utilisé pour déterminer la nature exacte de l'erreur.utf8
contenu, sinonjson_decode
vous risquez de vous tromper et de simplement renvoyer uneNULL
valeur.la source
la source
Nous pouvons décoder la chaîne json en tableau en utilisant la fonction json_decode en php
1) json_decode ($ json_string) // il retourne un objet
2) json_decode ($ json_string, true) // il retourne un tableau
la source
Pensez à utiliser
JSONPath
https://packagist.org/packages/flow/jsonpathIl y a une explication assez claire sur la façon de l'utiliser et d'analyser un fichier JSON en évitant toutes les boucles proposées. Si vous connaissez
XPath
pourXML
vous commencerez aimer cette approche.la source
J'ai écrit un package nommé
JSON
( GitHub , Packagist ). Si vous souhaitez éviter les frais généraux liés à l'utilisation desjson_*
fonctions, essayez-le.Exemple
Consultez le wiki ou le didacticiel rapide pour vous familiariser avec celui-ci.
De plus, si vous voulez lire des fichiers JSON et extraire ses données (car il semble que vous essayez de le faire), voir le package JSONFile , que je l'ai également écrit.
la source
https://paiza.io/projects/X1QjjBkA8mDo6oVh-J_63w
Vérifiez ci-dessous le code pour convertir json en tableau
PHP
, si JSON est correct, alorsjson_decode()
fonctionne bien et retournera un tableau, mais s'il est mal formé JSON, alors il retourneraNULL
,Si JSON est mal formé et que vous attendez uniquement un tableau, vous pouvez utiliser cette fonction,
Si JSON est mal formé et que vous souhaitez arrêter l'exécution de code, vous pouvez utiliser cette fonction,
Vous pouvez utiliser n'importe quelle fonction dépend de vos besoins,
la source