Looping through a JSON Array gives “undefined” results
本问题已经有最佳答案,请猛点这里访问。
我有一个JSON字符串正在从Ajax解析(在
JSON
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "TheArray":[ { "AlmostThere": { "whatWeAreLookingFor":"Hello" } }, { "AlmostThere": { "whatWeAreLookingFor":"Goodbye" } } ] } |
正在分析的JSON
1 | var jsonData = JSON.parse(response); //response is the string version of the JSON code! |
现在,我需要循环到JSON数组中,这里称为
循环排列
1 2 3 | for (var contents in jsonData["TheArray"]) { } |
在这里,我们得到了
1 2 3 | for (var contents in jsonData["TheArray"]) { console.log(contents.whatWeAreLookingFor +"!"); } |
但有一个陷阱!控制台输出…
你忘了访问EDOCX1[0]
1 | jsonData.TheArray[i].AlmostThere.whatWeAreLookingFor |
1 2 3 | for (var i = 0; i < jsonData.TheArray.length; i++) { console.log(jsonData.TheArray[i].AlmostThere.whatWeAreLookingFor); } |
您可以使用array.prototype.foreach代替:
1 2 3 | jsonData.theArray.forEach(function(contents) { console.log(contents.AlmostThere.whatWerAreLookingFor); }) |
如果您以自己的方式循环数组
1 2 3 4 5 | { "AlmostThere": { "whatWeAreLookingFor":"Hello" } } |
和
1 2 3 4 5 | { "AlmostThere": { "whatWeAreLookingFor":"Goodbye" } } |
现在,您要使用
contents.whatWeAreLookingFor
但是对于这些对象,这个属性是未定义的。所以你的控制台记录了
1 | contents.AlmostThere.whatWeAreLookingFor |
因此,您得到对象
如果使用jquery,则应使用:
1 2 3 | $.each(jsonData.TheArray, function() { console.log(contents.AlmostThere.whatWeAreLookingFor + '!'); }); |
API:http://api.jquery.com/jquery.each/