2012-06-05 25 views
14

estoy estudiando JSON y me preguntaba si esta es la forma correcta de escribir un objeto JSON multidimensional que es nested.I escribió:Cómo escribir una multi objeto JSON dimensiones anidada

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" 
    } 
}; 

es esto correcto o hay una convención que debo seguir si mi objeto se anida demasiado profundamente.

+1

Usted está asignando un valor de objeto a una variable cuyo nombre indica que posee un valor de cadena ... –

+0

Si usted significó "0" y "1" para representar objetos en una matriz que lo haría us notación de matriz '[]' y no especifique "0" o "1". Algo como https://gist.github.com/2875889 Tenga en cuenta que hay muchos pequeños problemas con lo que ha escrito, lo que subraya el punto a continuación ... no escriba JSON. –

+0

Gracias James por la esencia. – Gandalf

Respuesta

19

Considere utilizar matrices en lugar de objetos numerados.

matrices en JSON se definen utilizando [] http://www.json.org/

Aquí se muestra un ejemplo:

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" 
     } 
    ], 
}; 

(Perdóname si he olvidado ya sea cerrando {o [o, es bastante difícil de escribir código en SO: p)

de esta manera usted incluso no necesita tener cuenta como

"products":2, 

o

"childrenimages":2 

que simplemente

foo.products.length 

o

foo.products[0].childrenimages.length 

Buena suerte :)

+1

Esto es realmente una sugerencia sensata, usar índices numéricos como nombres de propiedades de objetos no tiene sentido. –

-1

No escriba JSON. En serio, a excepción de los archivos de configuración simple, no escriba JSON.

Tiene utilidades para convertir objetos a una cadena JSON en la mayoría de los idiomas (si no en ninguno).

PHP: json_encode($array);

Javascript: JSON.stringify(obj);

Etc.

escritura JSON manualmente a menudo conduce a errores de sintaxis. Del tipo que te da dolores de cabeza hasta que veas esa coma faltante o w/e. Tienes buenas herramientas para hacer esto, úsalas. Puede comparar con XML, pero JSON no tiene ninguna herramienta (IDE, editor de texto) que diga "Esta sintaxis es incorrecta" mientras la escribe. Por ejemplo, ningún editor le dirá que utilizó una comilla simple en lugar de una doble.

Simplemente no escriba JSON.

+1

¿Cuáles son sus declaraciones en contra de escribir JSON? No veo sentido en tu respuesta. –

+0

Porque escribir JSON manualmente a menudo conduce a errores que no ocurrirían si usa los métodos proporcionados por la mayoría de los lenguajes. ¿Por qué arriesgarse a este tipo de error cuando puede evitarlos? –

+0

@skwee ¿estás seguro? él te está sugiriendo que crees un objeto nativo en el idioma y luego lo corrijas: P entonces lo que estás haciendo es escribir JSON de la manera en que no falla y ERROS – ShrekOverflow

0

Aquí es el formato adecuado para sus datos (nota i cambiado algunos datos en sí)

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

Eso no es en realidad una matriz que tiene allí, eso es sólo un objeto que contiene propiedades que son también objetos. También te faltan algunas comas, así que esto ni siquiera compilará.

Lo que podría ser más conveniente para usted en este caso es usar tanto matrices como objetos para formar su JSON.Por ejemplo:

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" 
     } 
    ] 
}; 
Cuestiones relacionadas