Objets JSON imbriqués – Dois-je utiliser des tableaux pour tout?

Y a-t-il un moyen d'avoir des objets imbriqués dans JSON, donc je n'ai pas à faire des arrays de tout? Pour que je sois analysé sans erreur, je semble avoir besoin d'une structure comme celle-ci:

{"data":[{"stuff":[ {"onetype":[ {"id":1,"name":"John Doe"}, {"id":2,"name":"Don Joeh"} ]}, {"othertype":[ {"id":2,"company":"ACME"} ]}] },{"otherstuff":[ {"thing": [[1,42],[2,2]] }] }]} 

Si je récupère cet objet dans une variable appelée "résultat", je dois accéder aux objets imbriqués comme ceci:

 result.data[0].stuff[0].onetype[0] 

et

 result.data[1].otherstuff[0].thing[0] 

Cela me semble maladroit et redondant, si possible je préférerais:

 result.stuff.onetype[0] 

et

 result.otherstuff.thing 

Mais comment puis-je utiliser les touches d'objet directement lorsque tout est un tableau? À mon esprit confus et sans instruction, quelque chose comme ça semble plus approprié:

 {"data": {"stuff": {"onetype":[ {"id":1,"name": ""}, {"id":2,"name": ""} ]} {"othertype":[ {"id":2,"xyz": [-2,0,2],"n":"Crab Nebula","t":0,"c":0,"d":5} ]} } {"otherstuff": {"thing": [[1,42],[2,2]] } } } 

J'ai probablement mal compris quelque chose de fondamental ici, mais je ne peux pas obtenir l'analyseur jQuery (ni l'analyseur FF natif utilisé par jQuery 1.4) pour accepter le second objet de style. Si quelqu'un peut m'éclairer, il serait reconnaissant!

Vous n'avez pas besoin d'utiliser des tableaux.

Les valeurs JSON peuvent être des tableaux, des objets ou des primitives (nombres ou chaînes).

Vous pouvez écrire JSON comme ceci:

 { "stuff": { "onetype": [ {"id":1,"name":"John Doe"}, {"id":2,"name":"Don Joeh"} ], "othertype": {"id":2,"company":"ACME"} }, "otherstuff": { "thing": [[1,42],[2,2]] } } 

Vous pouvez l'utiliser comme ceci:

 obj.stuff.onetype[0].id obj.stuff.othertype.id obj.otherstuff.thing[0][1] //thing is a nested array or a 2-by-2 matrix. //I'm not sure whether you intended to do that. 

Vous devez disposer de plusieurs ensembles anonymes redondants dans vos données jSON, mais il est possible de récupérer les informations. Bien que, d'autres disent, il vaut mieux le nettoyer.

Utilisez chaque () enveloppement dans un autre () jusqu'à ce que le dernier tableau.

Pour result.data[0].stuff[0].onetype[0] vous pourriez faire

`

 $.each(data.result.data, function(index0, v) { $.each(v, function (index1, w) { $.each(w, function (index2, x) { alert(x.id); }); }); }); 

`

Chaque objet doit être nommé dans l'objet parent:

 { "data": { "stuff": { "onetype": [ { "id": 1, "name": "" }, { "id": 2, "name": "" } ], "othertype": [ { "id": 2, "xyz": [-2, 0, 2], "n": "Crab Nebula", "t": 0, "c": 0, "d": 5 } ] }, "otherstuff": { "thing": [[1, 42], [2, 2]] } } } 

Vous ne pouvez donc pas déclarer un objet comme celui-ci:

 var obj = {property1, property2}; 

Il doit être

 var obj = {property1: 'value', property2: 'value'};