2012-06-05 16 views
14

Sto studiando JSON e mi chiedevo se questo è il modo giusto di scrivere un oggetto JSON multi dimensionale che è nested.I ha scritto:Come scrivere un nidificato multidimensionale oggetto JSON

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

È questo diritto o c'è una convenzione che dovrei seguire se il mio oggetto diventa troppo profondamente annidato.

+1

Stai assegnando un valore di oggetto a una variabile il cui nome implica che contiene un valore stringa ... –

+0

Se volevi dire "0" e "1" per rappresentare gli oggetti in un array si farebbe noi array notation '[]' e non specificare "0" o "1". Qualcosa come https://gist.github.com/2875889 Nota, ci sono molti piccoli problemi con quello che hai scritto, che sottolinea il punto fatto qui sotto .... non scrivere JSON. –

+0

Grazie James per il Gist. – Gandalf

risposta

19

Considerare l'utilizzo di matrici anziché di oggetti numerati.

array in JSON sono definite utilizzando [] http://www.json.org/

Ecco un esempio:

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

(Perdonami se ho dimenticato o chiusura {o [o, la sua piuttosto difficile da digitare il codice in SO: p)

In questo modo non avete nemmeno bisogno di effettuare una conta come

"products":2, 

o

"childrenimages":2 

È sufficiente fare

foo.products.length 

o

foo.products[0].childrenimages.length 

Buona fortuna :)

+1

Questo è in realtà un suggerimento sensato, l'uso di indici numerici come nomi di proprietà dell'oggetto non ha senso. –

-1

Non scrivere JSON. Seriamente, ad eccezione dei semplici file di configurazione, non scrivere JSON.

Si hanno programmi di utilità per convertire oggetti in una stringa JSON nella maggior parte delle lingue (se non ce ne sono).

PHP: json_encode($array);

Javascript: JSON.stringify(obj);

Ecc

scrittura JSON manualmente porta spesso a errori di sintassi. Il tipo che ti dà mal di testa finché non vedi quella virgola o w/e mancante. Hai buoni strumenti per farlo, usali. Si può paragonare a XML, ma JSON non ha uno strumento (IDE, editor di testo) che dice "Questa sintassi è sbagliata" mentre la si digita. Ad esempio, nessun editor ti dirà che hai usato una citazione singola invece di una doppia.

Basta non scrivere JSON.

+1

Quali sono le tue dichiarazioni contro la scrittura di JSON? Non vedo alcun punto nella tua risposta. –

+0

Poiché scrivere manualmente JSON spesso porta a errori che non si verificherebbero se si utilizzassero i metodi forniti dalla maggior parte delle lingue. Perché rischiare questo tipo di errore quando puoi evitarli? –

+0

@skwee sei sicuro? ti sta suggerendo di creare un oggetto nativo nel langauge e quindi di estenderne il contenuto: P quindi quello che stai facendo in realtà sta scrivendo JSON IL MODO CHE NON FA ERRONE E ERRO – ShrekOverflow

0

Ecco il formato corretto per i dati (nota ho cambiato un po 'di dati stessi)

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

Questo non è in realtà un array che hai lì, questo è solo un oggetto che contiene le proprietà che sono anche oggetti. Ti mancano anche alcune virgole quindi questo non verrà nemmeno compilato.

Ciò che potrebbe essere più conveniente in questo caso è utilizzare sia gli array che gli oggetti per formare il JSON.Per esempio:

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