2010-01-20 12 views
83

Gibt es eine Möglichkeit, verschachtelte Objekte in JSON zu haben, so dass ich nicht aus allen Arrays Arrays machen muss? Für meine Aufgabe ohne Fehler analysiert werden scheine ich eine Struktur wie diese brauchen:Geschachtelte JSON-Objekte - muss ich Arrays für alles verwenden?

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

Wenn ich dieses Objekt in eine Variable mit dem Namen „Ergebnis“ holen muss ich die verschachtelte Objekte wie folgt zugreifen:

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

und

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

Dies scheint ungeschickt und überflüssig zu mir, wenn möglich, ich bevorzugen würde:

result.stuff.onetype[0] 

und

result.otherstuff.thing 

Aber wie kann ich die Objektschlüssel verwenden, um direkt, wenn alles ein Array ist? Zu mein verwirrt und ungebildet Geist so etwas wie dies scheint besser geeignet:

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

Ich habe wohl etwas Grundsätzliches hier falsch verstanden, aber ich kann den jQuery-Parser nicht bekommen (noch die native FF-Parser von jQuery 1.4 verwendet wird) zu akzeptieren das zweite Stilobjekt. Wenn jemand mich erleuchten kann, würde es dankbar geschätzt werden!

+1

Die Syntax für ein Objekt mit mehr als eine Eigenschaft ist wie folgt: '{ "Stoff": ..." andere Sachen": ...} ' –

+1

@Jason: Er _apparies_ das bereits wissen; er selbst schrieb '{" id ": 2," name ":" "}. Aber das ist mehr oder weniger das, was er verlangt, also bin ich mir nicht sicher. – SLaks

Antwort

151

Sie sein brauche keine Arrays zu verwenden.

JSON-Werte können Arrays, Objekte oder Primitive (Zahlen oder Zeichenfolgen) sein.

Sie können JSON schreiben wie folgt aus:

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

Sie es wie folgt verwenden können:

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

Danke SLaks, das war einfach und informativ. – SunnyD

+1

Schließlich ein einfaches einfaches Beispiel. Süss. Warum müssen alle immer angeben? –

7

Jedes Objekt muss innerhalb des übergeordneten Objekt benannt werden:

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

So kippe Sie ein Objekt wie folgt erklären:

var obj = {property1, property2}; 

Es hat

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

Sie müssen viele redundante verschachtelte Array in Ihrem JSON-Daten, aber es ist möglich abrufen die Information. Obwohl wie andere sagen, du solltest es besser aufräumen.

Verwenden Sie each() wrap innerhalb eines anderen() bis zum letzten Array.

für result.data[0].stuff[0].onetype[0] könnten Sie

tun

`

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

}); 

`

+0

Das hat mir sehr geholfen !! – Alexxio

+0

syarul, das hat mir auch sehr geholfen. Die anderen Antworten haben vielleicht die Frage spezifisch beantwortet, aber deine hat mir geholfen, das Konzept weiter zu verstehen. Vielen Dank! – jffgrdnr

Verwandte Themen