47

I have a JSON object which is generated by PHP. It's an object with a set of dates. It has the timeStamp and then a formatted version of the date. How would I iterate through this in jQuery?

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

I've tried:

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

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

and

for (var i in data) { 
  alert(data.dates.timeStamp[i]); 
};
1
  • 1
    I cleaned up your code for posterity, this is a good example. Commented Jul 23, 2016 at 23:01

4 Answers 4

90

Since you tagged your question as a jquery one, you should use $.each because it's jquery's iterator function:

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

If you want to stick to the for in syntax (which i see you've tried), a solution might be :

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

But beware that the for in syntax may do more than you think it does: it iterates over the properties inherited from the prototype too, so it might be usefull to make sure you iterate only on the object instance properties:

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
Another elegant way is to use the Object.keys method that returns an array containing all the keys in the targeted object to iterate over all the object's properties:

for(var i=0, keys=Object.keys(data.dates), l=keys.length; i<l; i++) {
    alert(data.dates[i].timeStamp);
} 
Sign up to request clarification or add additional context in comments.

3 Comments

Hey thanks, I decided to stick with the for in syntax. Just something I'm more familiar with coming from a PHP and Java background
Shouldn't it be "i" instead of "key" in the alert?..Using 'i' worked for me
Thanks for noticing, @Ravin! It was a typo - the power of copy-paste :)
3

You use $.each().
It looks like this:

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

2 Comments

$.each does not work in situations where there is no length and will just be passed over.
the OP is attempting to iterate through an array of dates, arrays have a length: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
3

You can simply iterate through the json structure using jQuery each:

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

Comments

0

jQuery.each() is probably the easiest way, check this out: http://api.jquery.com/jQuery.each/

eg

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.