12

可能重复:
如何在 JSON 对象上循环?

我试图找出如何遍历 JSON obj 的属性。我可以通过指定键来获取属性(见下文),但是我如何循环遍历所有属性?

var jsonStr = '{"Items":[{"Title": "Title 1", "Description":"Description 1"}]}';

var json_parsed = $.parseJSON(jsonStr);


// Cycle through all list items
$.each(json_parsed.Items, function(i, val) {
    var listItem = $(this);

    var title = listItem.attr('Title');
    var description = listItem.attr('Description');

    // Instead, loop through all attributes

}
4

3 回答 3

24
for (var name in json_parsed) {
    console.log(name + "=" + json_parsed[name]);
}

如果您需要检查是否在相关对象上定义了相应的属性,而不是在原型链上的某些对象上(这对于所讨论的情况来说很荒谬,但仍然有用),您可以添加此检查:

if (json_parsed.hasOwnProperty(name))
    console.log(name + "=" + json_parsed[name]);

编辑

要实际迭代所有数组对象的属性,请使用以下代码段:

var items = json_parsed.Items;
for (var i = 0; i < items.length; ++i) {
    console.log("Item #" + i);
    for (var name in items[i]) {
        console.log(name + "=" + items[i][name]);
    }
}
于 2012-09-27T13:40:34.197 回答
2

JSON 对象只是一个 Javascript 对象。如果您已经在使用 jQuery,您可以在其上再次使用 $.each() 来迭代其命名属性。

于 2012-09-27T13:41:14.027 回答
1
var jsonStr = '{"Items":[{"Title": "Title 1", "Description":"Description 1"}]}';

var json_parsed = JSON.parse(jsonStr);

var items = json_parsed.Items; // an array

for (var i=0; i<items.length; i++) { // loop over it

     var listItem = items[i]; // an object

     for (var prop in listItem) { // enumerate its property names

         // prop is "Title", "Description" etc
         listItem[prop] // is the respective value

     }

}
于 2012-09-27T13:44:03.030 回答