2012-06-05 7 views
14

Je suis en train d'étudier JSON et je me demandais si cela est la bonne façon d'écrire un objet JSON à plusieurs dimensions qui est nested.I a écrit:Comment écrire un objet JSON imbriqué pluridimensionnel

var foo = { 
    "logged_in":true, 
    "town":"Dublin", 
    "state":"Ohio", 
    "country":"USA", 
    "products":2, 
    "0":{ 
     "pic_id":"1500", 
     "description":"Picture of a computer", 
     "localion":"img.cloudimages.us/2012/06/02/computer.jpg", 
     "type":"jpg", 
     "childrenimages":2 

     "0":{ 
     "pic_id":"15011", 
     "description":"Picture of a cpu", 
     "localion":"img.cloudimages.us/2012/06/02/mycpu.png", 
     "type":"png" 
      } 
     "1":{ 
     "pic_id":"15012", 
     "description":"Picture of a cpu two", 
     "localion":"img.cloudimages.us/2012/06/02/thiscpu.png", 
     "type":"png" 
      } 
    }, 
    "1":{ 
     "pic_id":"1501", 
     "description":"Picture of a cpu", 
     "localion":"img.cloudimages.us/2012/06/02/cpu.png", 
     "type":"png" 
    } 
}; 

Est-ce droit ou y a-t-il une convention à suivre si mon objet devient trop profondément imbriqué?

+1

Vous assignant une valeur d'objet à une variable dont le nom implique qu'il est titulaire d'une valeur de chaîne ... –

+0

Si vous vouliez dire « 0 » et « 1 » pour représenter des objets dans un tableau que vous le feriez utilise la notation de tableau '[]' et ne spécifie pas "0" ou "1". Quelque chose comme https://gist.github.com/2875889 Remarque, il ya beaucoup de petits problèmes avec ce que vous avez écrit, ce qui souligne le point ci-dessous .... ne pas écrire JSON. –

+0

Merci James pour le Gist. – Gandalf

Répondre

19

Envisagez d'utiliser des tableaux au lieu d'objets numérotés.

Les tableaux JSON sont définis à l'aide [] http://www.json.org/

Voici un exemple:

var foo = { 
    "logged_in":true, 
    "town":"Dublin", 
    "state":"Ohio", 
    "country":"USA", 
    "products": 
    [ 
     { 
      "pic_id":"1500", 
      "description":"Picture of a computer", 
      "localion":"img.cloudimages.us/2012/06/02/computer.jpg", 
      "type":"jpg", 
      "childrenimages": 
      [ 
       { 
        "pic_id":"15011", 
        "description":"Picture of a cpu", 
        "localion":"img.cloudimages.us/2012/06/02/mycpu.png", 
        "type":"png" 
       }, 
       { 
        "pic_id":"15012", 
        "description":"Picture of a cpu two", 
        "localion":"img.cloudimages.us/2012/06/02/thiscpu.png", 
        "type":"png" 
       } 
      ] 
     }, 
     { 
      "pic_id":"1501", 
      "description":"Picture of a cpu", 
      "localion":"img.cloudimages.us/2012/06/02/cpu.png", 
      "type":"png" 
     } 
    ], 
}; 

(Pardonnez-moi si j'oublié soit fermer {ou [ou, son assez difficile à taper le code dans SO: p)

de cette façon, vous ne même pas besoin d'avoir compte comme

"products":2, 

ou

"childrenimages":2 

Vous faites simplement

foo.products.length 

ou

foo.products[0].childrenimages.length 

Bonne chance :)

+1

C'est en fait une suggestion sensée, en utilisant des index numériques comme les noms de propriété d'objet n'a aucun sens. –

-1

Ne pas écrire JSON. Sérieusement, à l'exception des fichiers de configuration simples, n'écrivez pas JSON.

Vous avez des utilitaires pour convertir des objets en une chaîne JSON dans la plupart des langues (sinon toutes).

PHP: json_encode($array);

Javascript: JSON.stringify(obj);

Etc.

écriture JSON conduit souvent manuellement à des erreurs de syntaxe. Le genre qui vous donne des maux de tête jusqu'à ce que vous voyiez cette virgule manquante ou w/e. Vous avez de bons outils pour le faire, utilisez-les. Vous pouvez comparer avec XML, mais JSON n'a aucun outil (IDE, éditeur de texte) disant "Cette syntaxe est fausse" pendant que vous le tapez. Par exemple, aucun éditeur ne vous dira que vous avez utilisé une seule citation au lieu d'un double.

N'écrivez simplement pas JSON.

+1

Quelles sont vos déclarations contre l'écriture JSON? Je ne vois aucun point dans votre réponse. –

+0

L'écriture manuelle de JSON entraîne souvent des erreurs qui ne se produiraient pas si vous utilisiez les méthodes fournies par la plupart des langues. Pourquoi risquer ce genre d'erreur quand vous pouvez les éviter? –

+0

@skwee-vous sûr? il vous suggère de créer un objet natif dans la langue, puis d'en exclure json: P alors ce que vous faites est en train d'écrire JSON le chemin QU'IL NE FAIT PAS ÉCHOUE et ERROS – ShrekOverflow

0

Voici le format approprié pour vos données (note i changé certaines données lui-même)

{ 
    "logged_in":true, 
    "town":"Dublin", 
    "state":"Ohio", 
    "country":"USA", 
    "products":2, 
    "productinfo":[ 
     { 
      "0":{ 
       "pic_id":"1500", 
       "description":"Picture of a computer", 
       "localion":"img.cloudimages.us/2012/06/02/computer.jpg", 
       "type":"jpg", 
       "childrenimages":2 
      }, 
      "1":{ 
       "pic_id":"15011", 
       "description":"Picture of a cpu", 
       "localion":"img.cloudimages.us/2012/06/02/mycpu.png", 
       "type":"png" 
      }, 
      "2":{ 
       "pic_id":"15012", 
       "description":"Picture of a cpu two", 
       "localion":"img.cloudimages.us/2012/06/02/thiscpu.png", 
       "type":"png" 
      }, 
      "3":{ 
       "pic_id":"1501", 
       "description":"Picture of a cpu", 
       "localion":"img.cloudimages.us/2012/06/02/cpu.png", 
       "type":"png" 
      } 
     } 
    ] 
} 
0

Ce n'est pas en réalité un tableau que vous avez là, c'est juste un objet contenant des propriétés qui sont aussi des objets. Il vous manque également quelques virgules, donc cela ne sera même pas compilé.

Ce qui pourrait vous être plus pratique dans ce cas est d'utiliser à la fois des tableaux et des objets pour former votre JSON.Par exemple:

var this_json_string = { 
    "state":"Ohio", 
    "country":"USA", 
    "products":[ 
     { 
      "pic_id":"1500", 
      "description":"Picture of a computer", 
     }, 

     { 
      "pic_id":"15011", 
      "description":"Picture of a cpu" 
     }, 
     { 
      "pic_id":"15012", 
      "description":"Picture of a cpu two" 
     }, 
     { 
      "pic_id":"1501", 
      "description":"Picture of a cpu" 
     } 
    ] 
}; 
Questions connexes