在Javascript中循环遍历JSON对象数组

时间:2013-01-28 05:43:31

标签: javascript json

我打算问一个问题,为什么它不起作用。但是当我评论代码时,我意识到我可以访问文本数组样式,item给了我索引。我花了一段时间才发现这是解决方案,但我宁愿在for循环中使用item.text。这是[我发布的答案]在Javascript中循环JSON对象的有效方法吗?

2 个答案:

答案 0 :(得分:2)

There's no such thing as a JSON object - 一旦你解析了你的JSON(这是一个字符串),你最终只会得到一个对象。或者数组。

无论如何,要遍历一个对象数组,请使用传统的for循环。 for..in循环可能有效,但不建议使用它,因为它可能会循环遍历非数字属性(如果有人一直在搞乱内置数组)。

在您的具体情况下,如果obj.body.items是一个数组,那么请执行以下操作:

for (var i = 0; i < obj.body.items.length; i++) {
    // obj.body.items[i] is current item
    console.log(obj.body.items[i].text);
}

你可以说,通过直接保持对数组的引用而不是每次都通过整个obj.body.链访问它来使代码更整洁:

var items = obj.body.items;
for (var i = 0; i < items.length; i++) {
    console.log(items[i].text);
}
  

“我宁愿在for循环中使用 item.text

在你的答案中 - 真的应该作为问题的一部分发布 - 因为你正在使用for..in循环,你的item变量依次被设置为每个索引作为字符串,例如,在第一次迭代时,它将是字符串"0",并且字符串没有text属性,因此item.text不起作用 - 尽管它应该给你{{1} },而不是undefined。但你可以这样做:

null

也就是说,声明一个名为var item; for (var i = 0; i < obj.body.items.length; i++) { item = obj.body.items[i] // get current item console.log(item.text); // use current item } 的变量,您设置为在每次循环迭代开始时引用当前数组项。

答案 1 :(得分:0)

    <script type="text/javascript">
    ...   
    obj = JSON.parse(xmlhttp.responseText);
    // displays the object as expected
    console.log(obj);
    // display the string next as expected
    console.log(obj.body.next);
    // displays the text of the item as expected
    console.log(obj.body.items[0].text);
    for (var item in obj.body.items) {
    // displays the index value of the item
        console.log(item);
    // displays null - WHAT?? HUH?
        console.log(item.text);
    // displays the text - finally
        console.log(obj.body.items[item].text);
    }
    <script>