我想通过给定的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]
。我没有在对象中获得实际数据。
答案 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