2010-11-20 7 views
17

Wie die JSON-Daten in jQuery zu iterieren.Wie ison Daten in jquery iterieren

[{"id":"856","name":"India"}, 
{"id":"1035","name":"Chennai"}, 
{"id":"1048","name":"Delhi"}, 
{"id":"1113","name":"Lucknow"}, 
{"id":"1114","name":"Bangalore"}, 
{"id":"1115","name":"Ahmedabad"}, 
{"id":"1116","name":"Cochin"}, 
{"id":"1117","name":"London"}, 
{"id":"1118","name":"New York"}, 
{"id":"1119","name":"California"} 
] 

Antwort

44

Sie $.each() wie diese verwenden:

$.each(data, function(i, obj) { 
    //use obj.id and obj.name here, for example: 
    alert(obj.name); 
}); 
+1

Was passiert, wenn ich die Namen der Schlüssel und Werte vom JSON-Objekt nicht kenne? – plutonium1991

+0

Was ist 'i' und' obj' in der Liste der Argumente? –

+2

@Adamnick Ich würde eine Vermutung riskieren, dass "i" der Index ist und "obj" das Objekt ist, aus dem jedes Element besteht. – Opux

2

könnten Sie verwenden die .each() Funktion:

$(yourjsondata).each(function(index, element) { 
    alert('id: ' + element.id + ', name: ' + element.name); 
}); 
+0

'.each()' ist für den Betrieb auf jQuery Objekte bestimmt, die gewöhnlichen Arrays enthalten nicht dazu gedacht sind, besser zu benutze '$ .each()' so, wie es beabsichtigt war. –

+0

@Nick, ich dachte, dass jquery-Objekte wie solche, die von jquery-Selektoren zurückgegeben werden, normale Arrays sind. Ich stimme Ihnen zu, dass in diesem Fall die statische '$ .each'-Methode geeigneter wäre. –

+0

Sie haben auch eine Reihe anderer Eigenschaften, Sie können '.get()' verwenden (was intern '.toArray()' ist), um ein Basis-Array von DOM-Elementen zu erhalten. –

6

Sie einfach zu regelmäßigen Javascript verwenden kann, was ich denke, wäre ein bisschen sein schneller (obwohl ich nicht sicher bin, wie jQuery each optimiert):

var data = [{"id":"856","name":"India"}, 
{"id":"1035","name":"Chennai"}, 
{"id":"1048","name":"Delhi"}, 
{"id":"1113","name":"Lucknow"}, 
{"id":"1114","name":"Bangalore"}, 
{"id":"1115","name":"Ahmedabad"}, 
{"id":"1116","name":"Cochin"}, 
{"id":"1117","name":"London"}, 
{"id":"1118","name":"New York"}, 
{"id":"1119","name":"California"} 
]; 

var data_length = data.length; 
for (var i = 0; i < data_length; i++) { 
    alert(data[i]["id"] + " " + data[i]["name"]); 
} 

bearbeitet

+1

Es kommt darauf an, der Zugriff auf '.length' ist nicht trivial, also sollte man es am besten zwischenspeichern, wenn die Leistung ein Problem darstellt. –

+0

Ich stimme zu, wenn es ein großes Array ist (bearbeitet meinen Beitrag) – cambraca

2

Iterierte auf das alle Objekt Nicks Vorschlag über die Leistung zu reflektieren Eigenschaften mit der .each Funktion $. in jeder Iteration wird der Name/Schlüssel und den Wert der Immobilie erhalten:

$.each(data, function(key, val) { 
    alert(key+ " *** " + val); 
});