IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

lecture de JSON, Type string ?


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut lecture de JSON, Type string ?
    bonjour,

    Je butte sur un problème lors de la récupération de données d'un objet. Cette objet est une partie d'un objet plus vaste passé en paramètre au constructeur d'un objet. Il est de la forme suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    pathData{
            mainFill:"r(0.1,0.2)#fff-#83A1AD-#134E6C-#000",
            actFill:"#d95d02",
            mainFillHovered: "",
            actFillHovered: "",
            mainFillSelected: "",
            actFillSelected: "",
            r: 50,
            node0:{
                phase0:{
                    x : 600,
                    y : 99,
                    toNext:{
                        type: "l"
                    }
                }
            }
    Lorsque je fais une boucle "for property in pathData" , j'obtiens sans problème l'ensemble des propriétés de premier niveau que sont mainFill, actFill etc... jusqu'à node0. La où ça se corse, c'est lorsque j'essaye d'accéder à l'intérieur de cette boucle à la propriété phase0.

    J'ai essayé de faire une nouvelle boucle "for prop in property" afin de récupérer la valeur
    de phase0. Je n'ai récupéré qu'une suite de nombre de 0 à 4. Lorsque je fais :

    J'obtiens "string", ce qui est étrange. J'ai donc essayé d'accéder directement à la propriété en faisant :

    et

    sans succès.

    Je pense que mon erreur vient de mon incompréhension du format JSON. Est-ce que quelqu'un peut m'éclairer? Merci!

    Ci-dessous le code complet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    for(var property in pathData)
                {
     
                    if(pathData.hasOwnProperty(property) && property.match(/^node/))
                    {            
     
                        for(var prop in property)
                        {
     
                            if(property.hasOwnProperty(prop) && prop.match(/^phase/))
                            {
     
                                for(var p in prop)
                                {
     
                                }
                            }
                        }

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Bonjour,

    Ton problème vient du fait que tu utilises property :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    for(var property in pathData)
                {
                   
                    if(pathData.hasOwnProperty(property) && property.match(/^node/))
                    {            
                
                        for(var prop in pathData[property])
                        {
                           
                            if(property.hasOwnProperty(prop) && prop.match(/^phase/))
                            {
                                
                                for(var p in property[prop])
                                {
                                  
                                }
                            }
                        }

  3. #3
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    1) Utilises-tu une librairie JS ? si oui, ça serait dommage de réinventer la poudre. Par exemple, je sais que Prototype gère très bien la manipulation des JSON (serialisation, parsage, etc.), et j'imagine que les autres libs le font aussi.

    2) Sinon il serait plus générique et moins fastidieux d'écrire une fonction récursive pour gérer dynamiquement un nombre indéterminé de niveaux...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut
    Citation Envoyé par gwyohm Voir le message
    Bonjour,

    Ton problème vient du fait que tu utilises property :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    for(var property in pathData)
                {
                   
                    if(pathData.hasOwnProperty(property) && property.match(/^node/))
                    {            
                
                        for(var prop in pathData[property])
                        {
                           
                            if(property.hasOwnProperty(prop) && prop.match(/^phase/))
                            {
                                
                                for(var p in property[prop])
                                {
                                  
                                }
                            }
                        }
    Merci Gwyohm pour ta réponse. Est-ce que tu pourrais m'expliquer ce que j'ai compris de travers dans la manipulation des objets pour m'être trompé? D'autre part, un autre problème est apparu :

    La condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property.hasOwnProperty(prop) && prop.match(/^phase/)
    ne fonctionne pas. Je me demande si je ne fais pas une erreur du même ordre mais je dois avouer que je ne comprenant cette première erreur...

    1) Utilises-tu une librairie JS ? si oui, ça serait dommage de réinventer la poudre. Par exemple, je sais que Prototype gère très bien la manipulation des JSON (serialisation, parsage, etc.), et j'imagine que les autres libs le font aussi.
    En fait, je suis vraiment tout débutant en Javascript et je me dit qu'il sera toujours temps de me servir de librairies dont le code est meilleur que le mien. Peut-être est-ce orgueilleux de ma part mais je ne suis pas en production pour l'instant et j'ai peur de passer à côté des bases du langage en m'en servant...

  5. #5
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Quand tu boucles sur tes propriétés avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (var foo in bar) {
     
    }
    a chaque itération tu obtiens dans foo le nom d'une propriété de bar.
    Pour accéder à sa valeur, il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (var foo in bar) {
      var value = bar[foo];
    }
    Quant à ton deuxième problème, c'est le même que le premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //...       
    for(var prop in pathData[property])
    {
      if(pathData[property].hasOwnProperty(prop) && prop.match(/^phase/))
      {
        for(var p in property[prop])
        {
        }
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR] les champs de type string
    Par yvescollet dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 05/10/2004, 16h29
  2. Type String* en paramètre...
    Par Invité dans le forum MFC
    Réponses: 4
    Dernier message: 24/02/2004, 19h48
  3. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52
  4. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 16h59
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo