2013-05-14 9 views
6

mam dwa rodzaje wyników JSON:jQuery każda funkcja dla jednego lub wielu elementów

{ 
"person":{ 
    "fname": "Homer", 
    "lname": "Simpson" 
    } 
} 

{ 
"person":[ 
    { 
    "fname": "Homer", 
    "lname": "Simpson" 
    }, 
    { 
    "fname": "Marge", 
    "lname": "Simpson" 
    } 
    ] 
} 

Chcę użyć jQuery "każdy":

$.each(response.person, function(i, person){... 

ale "ja" i „osoba "są różne, gdy JSON ma jedną, a wiele osób. widzę pojedyncza odpowiedź osoba nie posiada tablicę „[]”, ale kiedy:

$.each([response.person], function(i, person){... 

wtedy wiele osób nie działa. Szukam sposobu na znormalizowanie rzeczy, aby móc używać "każdego" konsekwentnie.

+0

Czy istnieje jakiś sposób, aby zmienić sposób wyniki są generowane? –

+0

Czy to odpowiedź od YQL? yql robi to z jednym wynikiem vs multi. –

Odpowiedz

4

Sprawdź, czy jest to tablica.

$.each(($.isArray(response.person) ? response.person : [response.person]), function(i, person){... 

czy można zmodyfikować obiekt przed iteracji:

if (!$.isArray(response.person)) { 
    response.person = [response.person]; 
} 
$.each(response.person, function(i, person){... 
+0

to działa świetnie, thx! – bmw0128

+1

@ bmw0128 Wolę jednak rozwiązanie Pills. –

+0

Właśnie widziałem rozwiązanie z Pills. To również dobrze, ale widziałem Kevina pierwszy i myślę, że są dość równi. – bmw0128

6

Idealnie byłoby mieć tablicę wam na początku, ale zawsze można .concat wyniki do pustej tablicy. Pozwoli to na pętli konsekwentnie:

$.each([].concat(response.person), function(i, person){... 

http://jsfiddle.net/MtzH8/

+0

Wiedziałem, że istnieje, trudno było znaleźć to, czego szukałem przez google, ale tutaj jest –

Powiązane problemy