2010-01-20 50 views
83

¿Hay alguna forma de tener objetos anidados en JSON para que no tenga que hacer arreglos de todo? Por mi objeto a ser analizado sin error parece que necesito una estructura como esta:Objetos JSON anidados: ¿tengo que usar matrices para todo?

{"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 voy a buscar este objeto en una variable llamada "número" Tengo que acceder a los objetos anidados como este:

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

y

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

Esto parece torpe y redundante para mí, si es posible yo preferiría:

result.stuff.onetype[0] 

y

result.otherstuff.thing 

Pero ¿cómo puedo usar las claves de objeto directamente cuando todo es una matriz? Para mi confusa y sin educación mente algo como esto parece más adecuado:

{"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]] 
     } 
    } 
} 

probablemente he entendido bien algo aquí fundamental, pero no puedo conseguir el analizador jQuery (ni el analizador FF nativo utilizado por jQuery 1.4) para aceptar el segundo objeto de estilo. ¡Si alguien puede iluminarme, sería agradecido!

+1

La sintaxis de un objeto con más de una propiedad es la siguiente: '{ "cosas": ..." otras cosas": ...} ' –

+1

@Jason:" Parece "saber eso; él mismo escribió '{" id ": 2," nombre ":" "}'. Sin embargo, eso es más o menos lo que pregunta, así que no estoy seguro. – SLaks

Respuesta

151

Usted no es necesario usar matrices.

Los valores JSON pueden ser matrices, objetos o primitivas (números o cadenas).

Puede escribir JSON como esto:

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

Se puede utilizar la siguiente manera:

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. 
+1

Gracias SLaks, esto fue simple e informativo. – SunnyD

+1

Finalmente, un simple ejemplo básico. Dulce. ¿Por qué todos siempre tienen que presumir? –

7

Cada objeto tiene que ser nombrado en el interior del objeto padre:

{ "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]] 
    } 
} 
} 

así que no puedes declarar un objeto como éste:

var obj = {property1, property2}; 

Tiene que ser

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

Tienes que muchos matriz anidada redundante dentro de sus datos JSON, pero es posible recuperar la información. Aunque, como otros dicen, será mejor que lo limpies.

utilice cada() ajuste dentro de cada uno() hasta la última matriz.

para result.data[0].stuff[0].onetype[0] que podría hacer

`

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

}); 

`

+0

¡Esto me ayudó mucho! – Alexxio

+0

syarul, esto también me ayudó mucho. Las otras respuestas pueden haber respondido la pregunta específicamente, pero la tuya me ayudó a entender el concepto de manera más amplia. ¡Gracias! – jffgrdnr

Cuestiones relacionadas