2012-06-05 14 views
14

Ich studiere json schreiben, und ich habe mich gefragt, ob dies der richtige Weg ist, ein mehrdimensionale JSON-Objekt zu schreiben, die nested.I ist geschrieben:Wie ein verschachteltes mehrdimensionale json Objekt

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

Ist das richtig Oder gibt es eine Konvention, der ich folgen sollte, wenn mein Objekt zu tief verschachtelt wird?

+1

Sie Zuweisung eines Objektwert einer Variablen, deren Name schon sagt, dass es einen String-Wert hält ... –

+0

Wenn Sie „0“ und „1“ bedeutet, Objekte in einem Array darstellen würden Sie us Array-Notation '[]' und nicht "0" oder "1" angeben. Etwas wie https://gist.github.com/2875889 Hinweis, es gibt viele kleine Probleme mit dem, was Sie geschrieben haben, was den folgenden Punkt unterstreicht .... Schreiben Sie nicht JSON. –

+0

Danke James für den Gist. – Gandalf

Antwort

19

Verwenden Sie Arrays anstelle von nummerierten Objekten.

Arrays in json definiert sind mit [] http://www.json.org/

Hier ein Beispiel:

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

(Verzeihen Sie mir, wenn ich entweder zu schließen vergessen {oder [oder, es ist ziemlich schwer Code eingeben SO: p)

auf diese Weise können auch nicht brauchen, zählt zu haben, wie

"products":2, 

oder

"childrenimages":2 

Sie tun einfach

foo.products.length 

oder

foo.products[0].childrenimages.length 

Viel Glück :)

+1

Dies ist eigentlich ein vernünftiger Vorschlag, die Verwendung numerischer Indizes als Objekteigenschaftsnamen macht keinen Sinn. –

-1

JSON nicht schreiben. Ernsthaft, außer für einfache Konfigurationsdateien, schreibe JSON nicht.

Sie haben Dienstprogramme zum Konvertieren von Objekten in eine JSON-Zeichenfolge in den meisten Sprachen (falls nicht vorhanden).

PHP: json_encode($array);

Javascript: JSON.stringify(obj);

Etc.

Writing JSON führt manuell oft Fehler Syntax. Die Art, die Ihnen Kopfschmerzen bereitet, bis Sie dieses fehlende Komma oder w/e sehen. Sie haben gute Werkzeuge, um dies zu tun, verwenden Sie sie. Sie könnten mit XML vergleichen, aber JSON hat kein Tool (IDEs, Texteditor), das sagt "Diese Syntax ist falsch", während Sie es eingeben. Zum Beispiel sagt Ihnen kein Redakteur, dass Sie ein einfaches Zitat anstelle eines doppelten verwendet haben.

Schreiben Sie einfach nicht JSON.

+1

Was sind Ihre Aussagen gegen das Schreiben von JSON? Ich sehe keinen Sinn in Ihrer Antwort. –

+0

Da das manuelle Schreiben von JSON häufig zu Fehlern führt, die bei Verwendung der von den meisten Sprachen bereitgestellten Methoden nicht auftreten würden. Warum riskieren Sie diese Art von Fehlern, wenn Sie sie vermeiden können? –

+0

@skwee Sie sicher? Er schlägt vor, dass Sie ein natives Objekt in der Sprache erstellen und dann json daraus stringieren: P also, was Sie gerade tun, schreibt JSON die Art, wie es nicht versagt und es abruft – ShrekOverflow

0

Hier ist das richtige Format für Ihre Daten (man beachte ich einige Daten verändert sich)

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

Das ist nicht wirklich ein Array, das Sie dort haben, das ist nur eine Objekteigenschaften enthält, die auch Objekte sind. Sie vermissen auch ein paar Kommas, so dass dies nicht einmal kompiliert wird.

Was in diesem Fall für Sie bequemer ist, ist die Verwendung von Arrays und Objekten, um Ihren JSON zu bilden.Zum Beispiel:

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