2012-03-27 18 views
30

Possiedo un oggetto JSON generato da PHP. È un oggetto con una serie di date. Ha il timeStamp e quindi una versione formattata della data. Come faccio a ripetere questo in jQuery?Come faccio a scorrere questo oggetto JSON in jQuery?

{ 
    "dates":[ 
    { 
     "timeStamp": 1317596400, 
     "formattedDate": "Mon 03 October 2011" 
    }, 
    { 
     "timeStamp": 1317682800, 
     "formattedDate": "Tue 04 October 2011" 
    }, 
    { 
     "timeStamp": 1317855600, 
     "formattedDate": "Thu 06 October 2011" 
    } 
    ] 
} 

ho provato:

for (var i in data) { 
    alert(data.dates[i].timeStamp); 
}; 

for (var i in data) { 
    alert(data[i].dates.timeStamp); 
}; 

e

for (var i in data) { 
    alert(data.dates.timeStamp[i]); 
}; 
+1

Ho ripulito il codice per la posterità, questo è un buon esempio. –

risposta

61

Dal momento che hai contrassegnato la tua domanda come jquery uno, si dovrebbe utilizzare $.each perché è la funzione iteratore jQuery:

$.each(data.dates, function(index, element) { 
    alert(element.timeStamp); 
}); 

Se si vuole attaccare alla sintassi for in (che vedo che hai provato), una soluzione potrebbe essere:

for(var key in data.dates) { 
    alert(data.dates[key].timeStamp); 
} 

Ma attenzione che la sintassi for in può fare di più di quanto si pensi lo fa: si itera sulle proprietà ereditate dal prototipo troppo, quindi potrebbe essere utile per assicurarsi di eseguire iterazioni solo sulle proprietà dell'istanza oggetto:

for(var key in data.dates) { 
    // if it's not something from the prototype 
    if(data.dates.hasOwnProperty(key)) { 
     alert(data.dates[key].timeStamp); 
    } 
} 

aggiornamento
un altro modo elegante è quello di utilizzare il metodo Object.keys che restituisce un array contenente tutte le chiavi in ​​oggetto mirato a iterare su tutte le proprietà dell'oggetto:

for(var i=0, keys=Object.keys(data.dates), l=keys.length; i<l; i++) { 
    alert(data.dates[key].timeStamp); 
} 
+0

Hey, grazie, ho deciso di seguire la sintassi for. Solo qualcosa che mi è più familiare con il background PHP e Java –

0

jQuery.each() è probabilmente il modo più semplice, check this out: http://api.jquery.com/jQuery.each/

esempio

$.each(dates, function(index, date) { alert(date.timeStamp); }); 
+0

dovrebbe essere 'data.dates' per farlo funzionare. –

3

Si utilizza $.each().
Ecco come si presenta:

$.each(data, function(n, elem) { 
    // here you process your data to data loaded to lines    
}); 
+0

$ .each non funziona in situazioni in cui non c'è lunghezza e verrà semplicemente passato. – gcoleman0828

+0

l'OP sta tentando di scorrere attraverso una serie di date, gli array hanno una lunghezza: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length –

+0

quindi forse i downvotes sono un po 'duri? –

1

si può semplicemente iterare thro ugh la struttura JSON utilizzando jQuery each:

$.each(data, function(index, element) { 
    alert(element.dates.timeStamp); 
}); 
Problemi correlati