2010-11-20 9 views
0

Le JSON est:jQuery itérer sur un objet (JSON)

{"Name":"bb", "age":"10"} 

Je cherchai beaucoup de dans l'Internet, mais la plupart des réponses sont je sais « Nom » et « âge » précédemment, ils référence comme j.Name, j.age. Je veux juste faire une chose équivalente, car nous ne connaissons pas les clés à l'intérieur de l'objet, nous voulons parcourir tous les éléments et imprimer à la fois KEY et VALUE (nous ne connaissons pas KEY précédemment). La déclaration pour chaque va bien dans Firefox, mais je trouve IE ne peut prendre en charge pour chaque boucle ...

+0

Qu'est-ce que votre look en boucle comme? – BoltClock

+2

FYI, ce n'est pas "un json" ou "un tableau associatif" mais "un objet". – ThiefMaster

+0

@TheifMaster techniquement, c'est JSON valide :-) –

Répondre

4

Vous pouvez utiliser une boucle for...in, comme ceci:

var obj = {"Name":"bb", "age":"10"}; 
for(var key in obj) { 
    if(obj.hasOwnProperty(key)) 
    alert("Key: " + key + "\nValue: " + obj[key]); 
} 

Ou dans le jQuery $.each() si vous avez besoin de la fermeture, comme ceci:

var obj = {"Name":"bb", "age":"10"}; 
$.each(obj, function(key, value) { 
    alert("Key: " + key + "\nValue: " + value); 
}); 

You can test both versions here.

+0

Si son objet provient de JSON ou d'un littéral d'objet, il n'a pas vraiment besoin de .hasOwnProperty - à moins que quelqu'un ne se soit trompé avec Object.prototype qui [est une mauvaise chose] (http://erik.eae.net/archives/2005/06 /06/22.13.54/) – ThiefMaster

+0

@ThiefMaster - Ce dernier * arrive *, pourquoi est-ce que je préfère que mes exemples de code soient sûrs pour * tous * les cas :) –

+0

@ThiefMaster - juste curieux, as-tu lu le lien ajoutée? La * première * première ligne est "Il n'est pas rare que vous voyez des gens jouer avec' Object.prototype' "... –

1

Sans jQuery vous pouvez utiliser une boucle for-in

var person = {"Name":"bb", "age":"10"}; 

for(var attr in person) { 
    alert('Attribute: '+attr); 
    alert('Value: '+person[attr]); 
} 

... jQuery:

var person = {"Name":"bb", "age":"10"}; 
$.each(person, function(attr, value) { 
    alert('Attribute: '+attr); 
    alert('Value: '+value); 
}); 
+1

Vous devriez aussi se 'hasOwnProperty' (bon en général quand on utilise' for (... in ...) ') au cas où une personne amusante décorait le prototype Object. –

1
var json = {"Name":"bb", "age":"10"} 
for (var i in json) { 
    console.log(json[i]); 
} 
+0

Je n'utiliserais pas 'i' pour une variable de boucle non numérique - dans une boucle for..in sur un objet, il contient une clé, pas un index numérique (même si la clé peut être numérique, mais ce n'est pas le point). – ThiefMaster

+1

Vous devriez également utiliser 'hasOwnProperty' (bon en général si vous utilisez' for (... in ...) ') au cas où une personne amusante décorait le prototype Object. –

+0

@ThiefMaster Pendant que je vois votre point, je considère que 'i' est clairement l'index dans une boucle, rendant le code plus lisible. Style de codage à mon avis, vraiment - ni est faux. – Razor