Partage
  • Partager sur Facebook
  • Partager sur Twitter

Parcours de fichier JSON

    26 août 2016 à 13:05:35

    Bonjour,

    je code un script qui parcoure un document JSON que j'apelle via une requête Ajax. Ce fichier Json represente un menu.

    J'ai besoin de connaître automatique le nombre de liens dans chaque catégorie. Lorsque je tape à la main var x=y.lien[0].outils.length j'ai le résultat souhaité.

    J'essaye d'automatiser ça via une boucle for mais j'ai toujours le même message d'erreur:TypeError: y.lien[i].tabNomCat is undefined

    Voici mon code

    function afficher(reponse) {
    
    
    
    	var y = JSON.parse(reponse);
    	//On déclare une variable qui contient le nombre de catégorie
    	var nb_Categories=y.lien.length;
    
    	//On stocke dans un tableau le nom de chaque catégorie
    	var tabNomCat=["Outils","Rapport","Consignes","Suivi activités","Astreintes","Outils RH","Autres"];
    
    	//On va stocker dans un tableau le nombre de lien par categorie
    	var tabCat= [nb_Categories];
    
    
    	//la requête suivante donne le nombre de liens pour la catégories outils var x=y.lien[0].outils.length;
    	//On essaie d'attribuer automatiquement a chaque son nombre de lien
    
    	for (var i=0;i<nb_Categories;i++){
    		tabCat[i]=y.lien[i].tabNomCat[i].length;
    		console.log(x);
    	}
    
    }



    • Partager sur Facebook
    • Partager sur Twitter
      26 août 2016 à 13:15:57

      Bonjour,

      Ligne 20 à remplacer par:

      tabCat[i]=y.lien[i][tabNomCat[i]].length;

      Et attention à la casse, c'est "outils" ou "Outils"?

      -
      Edité par Krogoth 26 août 2016 à 13:17:04

      • Partager sur Facebook
      • Partager sur Twitter
      Un petit +1 si je vous ai aidé est toujours appréciable :).
        26 août 2016 à 13:36:48

        @Krogoth -> TU ES LE BOSS ET TU LE RESTERAS ;)

        • Effectivement il y avait un problème de casse. Je me suis obstiné à scruter la boucle. Je pensais qu'utiliser plusieurs fois le même indice dans une même boucle pouvait générer des problèmes.
        • Concernant ta correction sur la ligne 20. Effectivement elle est utile mais je ne comprend pas mon erreur sur ma version à savoir:
           tabCat[i]=y.lien[i].tabNomCat[i].length;

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          26 août 2016 à 13:43:08

          Tu ne peux pas utiliser directement une variable en nom d'attribut c'est pour cela que tu dois passer par la forme que je t'ai donné.

          par exemple:

          json.toto;


           ca va marcher

          mais

          var attr = toto;
          json.attr;

           ne va pas marcher,

          tu dois faire:

          json[attr];


          Ce qui peut se comprendre car a priori rien n'interdit que la propriété attr n'existe pas réellement dans le json.

          Imagine que ton json ressemble a ca:

          {
          	"y":{
          		"lien" : [
          			{
          				"outils" : "bla"
          			} ,
          			{
          				"tabNomCat" : [
          					"titi",
          					"toto"
          				]
          			}
          		]
          	}
          }

          On comprend rapidement que si "outil" est dans la variable tabNomCat[x] ca va pas passer ;)

          -
          Edité par Krogoth 26 août 2016 à 13:48:53

          • Partager sur Facebook
          • Partager sur Twitter
          Un petit +1 si je vous ai aidé est toujours appréciable :).
            26 août 2016 à 13:54:56

            Dit autrement, quand tu écris y.lien[i].tabNomCat[i].length; tu dis que "tabNomCat" est le nom d'une propriété de l'objet y.lien[i], tandis que quand tu écris y.lien[i][tabNomCat[i]].length; tu dis que c'est tabNomCat[i] qui est une propriété de y.lien[i]. Ce sera remplacé par une chaîne de caractères à l'exécution.
            • Partager sur Facebook
            • Partager sur Twitter
              30 août 2016 à 10:17:59

              hello,

              je me permet de relancer le sujet. Il y a des choses que je n'ai pas bien compris au sujet du parcours de l'arbre JSON. Il y a t il une ou des ressources sur Open Class Room à ce sujet. Suivre le cours sur le JQuery peut il m'aider ? Merci

              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2016 à 8:51:38

                Il y a pas grand chose à savoir de plus peut être uniquement la structure de boucle ci-dessous:

                for(var propertie in my_json){
                    console.log('Propertie:'+propertie);
                    console.log('Value:'+my_json[propertie]);
                }

                Ici tu as un très bon exemple de parcours json:

                http://stackoverflow.com/questions/9463233/how-to-access-nested-json-data

                function traverse_it(obj){
                    for(var prop in obj){
                        if(typeof obj[prop]=='object'){
                            // object
                            traverse_it(obj[prop[i]]);
                        }else{
                            // something else
                            alert('The value of '+prop+' is '+obj[prop]+'.');
                        }
                    }
                }
                
                traverse_it(data);





                -
                Edité par Krogoth 31 août 2016 à 8:52:13

                • Partager sur Facebook
                • Partager sur Twitter
                Un petit +1 si je vous ai aidé est toujours appréciable :).

                Parcours de fichier JSON

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown