2015-10-30 7 views
3

У меня есть JSON строки разбираемый (в response вар) от AJAX:Looping через массив JSON дает "неопределенные" результаты

JSON

{ 
    "TheArray":[ 
     { 
     "AlmostThere": { 
      "whatWeAreLookingFor":"Hello" 
     } 
     }, 
     { 
     "AlmostThere": { 
      "whatWeAreLookingFor":"Goodbye" 
     } 
     } 
    ] 
} 

JSON разбираемый

var jsonData = JSON.parse(response); //response is the string version of the JSON code! 

Теперь мне нужно петли в JSON массив, hereb y упоминается как TheArray. Я делаю это:

LOOPING TheArray

for (var contents in jsonData["TheArray"]) { 

} 

И там внутри, мы получаем значение whatWeAreLookingFor элемента:

for (var contents in jsonData["TheArray"]) { 
    console.log(contents.whatWeAreLookingFor + "!"); 
} 

Но есть улов! Консольные выходы ...undefined!. - Я пробовал несколько способов сделать эту работу, например, используя contents["whatWeAreLookingFor"] и что-нет, но я все равно получаю те же результаты.

+2

[Не используйте 'для ... в 'for looping over Arrays] (http://stackoverflow.com/questions/242841/javascript-for-in-vs-for) - используйте регулярный цикл' for', 'forEach' или' for ... of' если вы можете использовать ES6. – joews

+0

Подсказка: log 'contents' внутри вашей петли. Это не будет то, что вы ожидаете. – joews

+0

'for (var contents in jsonData.TheArray) { console.log (jsonData.TheArray [содержимое] .AlmostThere.whatAwALLookingFor +"! "); } ' – Ryu

ответ

3

Вы забыли открыть AlmostThere

jsonData.TheArray[i].AlmostThere.whatWeAreLookingFor 

for (var i = 0; i < jsonData.TheArray.length; i++) { 
    console.log(jsonData.TheArray[i].AlmostThere.whatWeAreLookingFor); 
} 
0

Если петля ваш массив TheArray в пути, то contents вар станут эти два объекта:

{ 
    "AlmostThere": { 
     "whatWeAreLookingFor":"Hello" 
    } 
} 

и

{ 
    "AlmostThere": { 
     "whatWeAreLookingFor":"Goodbye" 
    } 
} 

Теперь вы хотите получить доступ к значению с

contents.whatWeAreLookingFor

, но этот атрибут не определен для этих объектов. Итак, ваши консольные журналы undefined. Вы должны получить доступ к значению с этим:

contents.AlmostThere.whatWeAreLookingFor 

Таким образом, вы получите объект AlmostThere и выберите атрибут whatWeAreLookingFor.

Если вы используете JQuery вы должны использовать:

$.each(jsonData.TheArray, function() { 
    console.log(contents.AlmostThere.whatWeAreLookingFor + '!'); 
}); 

API: http://api.jquery.com/jquery.each/

0

for... in перебирает ключей объекта.Для массива, что средства (approximately) индексы 0, 1, 2 и т.д.

Вы можете использовать Array.prototype.forEach вместо:

jsonData.theArray.forEach(function(contents) { 
    console.log(contents.AlmostThere.whatWerAreLookingFor); 
}) 
Смежные вопросы