Décoder JSON avec PHP sur plusieurs niveaux

Résolu/Fermé
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 - Modifié le 26 mars 2022 à 13:24
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 - 26 mars 2022 à 15:27
Bonjour,
J'ai un problème avec mon code et je n'arrive pas à le debugger. Je souhaite récupérer, en PHP, une variable très précise dans un fichier JSON. Or, j'ai du mal à récupérer la variable en question en raison du fait que le fichier JSON est à multiples niveaux.

Voici le fichier JSON en question :

[{
        "ville": {
            "cp": "01000",
            "nom": "SAINT DENIS LES BOURG",
            "dept": "01",
            "cooordonnees": {
                "id": "1",
                "latitude": "4620114",
                "longitude": "519791",
                "points": [{
                    "id": "1",
                    "nom": "Mag1"
                }, {
                    "id": "2",
                    "nom": "Mag2"
                }, {
                    "id": "3",
                    "nom": "Mag3"
                }]
            }
        }
    }, {
        "ville": {
            "cp": "01000",
            "nom": "BOURG EN BRESSE",
            "dept": "01",
            "cooordonnees": {
                "id": "1",
                "latitude": "4619566",
                "longitude": "522935",
                "points": [{
                    "id": "1",
                    "nom": "Mag4"
                }, {
                    "id": "2",
                    "nom": "Mag5"
                }]
            }
        }
    }, {
        "ville": {
            "cp": "01000",
            "nom": "BOURG EN BRESSE",
            "dept": "01",
            "cooordonnees": {
                "id": "2",
                "latitude": "4622100",
                "longitude": "524500",
                "points": [{
                    "id": "1",
                    "nom": "Mag6"
                }, {
                    "id": "2",
                    "nom": "Mag7"
                }, {
                    "id": "3",
                    "nom": "Mag8"
                }, {
                    "id": "4",
                    "nom": "Mag9"
                }]
            }
        }
    }
]


etc...

Et voici mon code PHP

$file = 'fichier.json'; 
$data = file_get_contents($file); //mise du fichier dans une variable
$obj = json_decode($data); // décoder le flux JSON


Avec cette requête :
echo $obj['ville'][3]->cp;


Rien ne s'affiche. J'ai testé ça aussi :

$results = array_filter($obj['ville'], function($ville) {
   return $ville['nom'] == "BOURG EN BRESSE";
 });
 var_dump($results);


Mais c'est un "NULL" qui ressort.

Ce que je souhaiterais, c'est lui dire : "écrit cette information précise sur telle ville".

Quelqu'un pourrait-il m'aider svp ? Merci d'avance.



A voir également:

3 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
26 mars 2022 à 13:36
Bonjour,

Fait un var_dump() de ta variable $obj pour voir quelle est la structure de données utilisées par PHP pour décoder ton fichier json. Tu devrais voir que la variable $obj est un tableau, il faut donc faire une boucle ou accéder à un élément du tableau via son index :
var_dump($obj[0]);
var_dump($obj[1]);


Chaque élément du tableau est un objet PHP (stdClass) qui possède une propriété ville, tu peux donc utiliser la syntaxe objet pour accéder à cette propriété. L'objet ville est lui même composé du plusieurs propriété (cp, nom, dpt) :
var_dump($obj[0]->ville);
var_dump($obj[0]->ville->cp);
1
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 44
Modifié le 26 mars 2022 à 13:51
Merci ! Par contre, je n'arrive pas à accéder jusqu'aux valeurs figurant dans la classe "points" avec cette formule :
echo $obj[0]->ville->cooordonnees->points->nom;

Cela me retourne rien.
Vois-tu ce que j'aurais oublié ?

0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié le 26 mars 2022 à 15:15
Même réponse ;) Fais un var_dump() de points, tu devrais voir que c'est également un tableau (il y a plusieurs points). Tu peux remarquer dans ton json l'utilisation de crochets [] pour définir un tableau, tandis que les accolades {} représentent des objets.
echo $obj[0]->ville->cooordonnees->points[0]->nom;
1
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 44
26 mars 2022 à 15:27
Merci beaucoup !
0