使用javascript / jQuery循环访问JSON结构

时间:2017-05-11 22:45:31

标签: javascript jquery json for-loop

我想通过给定的JavaScript

遍历下面的JSON
{  
    "jsonUrl": "/testUrl",  
    "data": {  
        "country":"US",  
        "company":"ABC",  
        "items":[  
         {  
             "id": "1",  
             "id2": "12345",  
             "total": 1  
         },
         {    
             "id": "2",  
             "id2": "23456",  
             "total": 2  
         }  
      ]  
   }  
}

我已尝试过以下但我没有运气。

for (var key in json) {
    if (json.hasOwnProperty(key)) {
         alert(json[key]);
    }
}

执行此操作时,警报会显示[object][object]。我没有在对象中获得实际数据。

3 个答案:

答案 0 :(得分:1)

首先,在这种情况下,请勿使用警报来观看对象的内容。当您使用alert并在其中传递对象时,解释器会在此对象上使用toString方法。它的结果是[object Object]构造。您可以在那里使用JSON.stringify

你是如何解析json的?您可以使用JSON.parse

执行此操作

此外,要检查对象是否具有hasOwnProperty方法的属性,您可以使用Array.prototype.forEach

yourArrayData.forEach(function () {
  console.log(JSON.stringify(value));
});

您也可以使用for-of(仅限ES6 +):

for (let value of yourArrayData) {
  console.log(JSON.stringify(value));
}

答案 1 :(得分:0)

更好的选择是使用Object.keys()函数获取密钥,然后迭代以获取您的信息。

答案 2 :(得分:0)

您尝试循环的JSON对象有几个级别,因此您无法简单地遍历键并获取其值(在这种情况下也是带键的对象)。根据您要检索的信息,您必须采取不同的行动。如果您事先知道结构,可以使用for循环遍历Object.data.items,或者如果您只想到达JSON对象的末尾,则可以设置队列:

let queue = [jsonObject];
while (queue.length > 0) {
    var objectToEvaluate = queue.shift();
    for (var key in objectToEvaluate) {
        if (objectToEvaluate.hasOwnProperty(key)) {
            if (typeof objectToEvaluate[key] === 'object') {
                queue.push(objectToEvaluate[key]);
            }
            else {
                // do something with the objectToEvaluate[key]
            }
        }
    }
}

队列需要注意几点。如果它可用于循环引用({a:b,b:a}),那么您需要跟踪哪些节点'已经检查过了。还有一些误报同时检查typeof是否为对象。我建议您更多地了解队列enter link description here