2012-03-15 10 views
5

Oto mój kod odpowiedzi w jQuery:Jak analizować dane JSON, gdy nazwa właściwości nie jest znana z góry?

var response = $.parseJSON(response); 

for (var i = 0; i < response.groupIds.length; i++) { 
    console.log(response.groupIds[i], i); 
} 

Każdy response.groupIds[i] ma postać {"unknown name":"unknown value"}.

Chciałbym uzyskać dostęp do obu tych fragmentów danych w javascript, jak mam to zrobić, gdy nie wiem z góry, co np. unknown name jest? Aby uzyskać pełną listę (tablicę) nazw kluczy, należy użyć

Odpowiedz

12

. Polyfill jest dostępny here.

var group = response.groupIds[i]; 

var allPropertyNames = Object.keys(group); 
for (var j=0; j<allPropertyNames.length; j++) { 
    var name = allPropertyNames[j]; 
    var value = group[name]; 
    // Do something 
} 

Format odpowiedzi na pytania zawiera tylko jedną parę klucz-wartość. Kod może zostać następnie zmniejszona do:

var group = response.groupIds[i]; 
var name = Object.keys(group)[0]; // Get the first item of the list; = key name 
var value = group[name]; 

Jeśli nie jesteś zainteresowany na liście, użyj for-i-in pętlę zhasOwnProperty. Aby wykluczyć właściwości dziedziczone z prototypu, należy użyć ostatniej metody.

for (var name in group) { 
    if (group.hasOwnProperty(name)) { 
     var value = group[name]; 
     // Do something 
    } 
} 
+0

Dzięki Rob, ale czym jest obiekt w powyższym kodzie? Odpowiedź? –

+0

Ah Rozumiem, dziękuję. –

3

Użyj for..in pętlę:

for(x in response.groupIds[i]) { 
    // x is now your unknown key 
    // response.groupIds[i][x] is the unknown value 
} 

Ponieważ istnieje tylko jedna właściwość obiektu, który będzie dobrze działać.

+0

Kiedy próbuję tego, mówi, że nie jest zdefiniowany? –

+0

Czy nie zdefiniowałeś tego w swojej pierwszej pętli 'for'? –

Powiązane problemy