2012-03-27 6 views
30

У меня есть объект JSON, который генерируется PHP. Это объект с набором дат. У этого есть timeStamp, а затем форматированная версия даты. Как я буду проходить через это в jQuery?Как выполнить итерацию через этот объект JSON в jQuery?

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

Я пробовал:

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

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

и

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

Я очистил свой код для потомков, это хороший пример. –

ответ

61

Поскольку вы помечено ваш вопрос как jquery один, вы должны использовать $.each, потому что это итератор функция JQuery в:

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

Если вы хотите придерживаться синтаксиса for in (что я вижу, вы пробовали), решение может быть:

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

Но будьте осторожны что синтаксис for in может сделать больше, чем вы думаете, что делает: он перебирает свойства, унаследованные от прототипа тоже, так что это может быть полезно, чтобы убедиться, что вы итерацию только на свойства экземпляра объекта:

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

обновление
Другой элегантный способ заключается в использовании Object.keys метода, который возвращает массив, содержащий все ключи в целевом объекте итерацию по всем свойствам объекта:

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

Эй, спасибо, я решил придерживаться синтаксиса for. Просто я лучше знаком с PHP и Java –

0

jQuery.each(), вероятно, самый простой способ проверить это: http://api.jquery.com/jQuery.each/

например

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

это должно быть 'data.dates', чтобы заставить его работать. –

3

Вы используете $.each().
Это выглядит следующим образом:

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

$ .each не работает в ситуациях, когда длина отсутствует и будет просто передана. – gcoleman0828

+0

OP пытается выполнить итерацию по массиву дат, массивы имеют длину: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length –

+0

, так что, возможно, downvotes немного суровы? –

1

Вы можете просто перебирать беспересадочные тьфу структура JSON с помощью jQuery each:

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