Jak iterować przez ten obiekt JSON w jQuery?

Mam obiekt JSON, który jest generowany przez PHP. To obiekt z zestawem dat. Ma znacznik czasu, a następnie sformatowaną wersję daty. Jak to zrobić w jQuery?

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

Próbowałem:

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

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

I

for (var i in data) { 
  alert(data.dates.timeStamp[i]); 
};
Author: Mike Kormendy, 2012-03-27

4 answers

Ponieważ otagowałeś swoje pytanie jako jquery, powinieneś użyć $.each ponieważ jest to funkcja iteratora jquery:

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

Jeśli chcesz trzymać się for in składnia (którą widzę, że próbowałeś), rozwiązaniem może być:

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

Ale uważaj, że składnia for in może zrobić więcej, niż myślisz: iteracja dotyczy również właściwości odziedziczonych po prototypie, więc może być przydatne upewnienie się, że iteracja dotyczy tylko właściwości instancji obiektu:

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

Update
Innym eleganckim sposobem jest użycie Object.keys metoda zwracająca tablicę zawierającą wszystkie klucze obiektu docelowego do iteracji wszystkich właściwości obiektu:

for(var i=0, keys=Object.keys(data.dates), l=keys.length; i<l; i++) {
    alert(data.dates[i].timeStamp);
} 
 67
Author: gion_13,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 19:52:37

Używasz $.each().
Wygląda to tak:

$.each(data, function(n, elem) {
    // here you process your data to data loaded to lines               
});
 3
Author: mfadel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 08:52:51

Możesz po prostu iterować poprzez strukturę json używając jQuery each :

$.each(data, function(index, element) {
   alert(element.dates.timeStamp); 
});
 2
Author: Mohammed Irfan Tirupattur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 02:04:56

JQuery.each() jest prawdopodobnie najprostszym sposobem, sprawdź to: http://api.jquery.com/jQuery.each/

Eg

$.each(dates, function(index, date) { alert(date.timeStamp); });
 0
Author: Mike Simmons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-27 09:48:08