【问题标题】:How to loop through the attributes of a JSON obj? [duplicate]如何遍历 JSON obj 的属性? [复制]
【发布时间】:2012-09-27 13:38:39
【问题描述】:

可能重复:
How to loop on a JSON object?

我正在尝试找出如何遍历 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

}

【问题讨论】:

  • 请注意,没有什么叫做“JSON 对象”。当你解析一些 JSON 字符串时,你会得到一个 javascript 对象。
  • 请不要这样使用jQuery!

标签: javascript jquery json


【解决方案1】:
for (var name in json_parsed) {
    console.log(name + "=" + json_parsed[name]);
}

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

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

编辑

要真正迭代所有数组对象的属性,请使用这个 sn-p:

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]);
    }
}

【讨论】:

  • 小心,这不仅可以迭代对象自身的属性。
  • @Kiyura 仅当对象是数组时
  • @Kiyura 如果对象是从 JSON 中解析出来的结果,则没有问题。
  • 它可以,尽管有问题的情况几乎不会受此影响。不过会解决这个问题。
  • 是的,对于 JSON 对象来说没问题,但是如果有人知道他们可以像这样使用 for..in,他们以后可能会去在普通的 JS 对象上使用它,并惊讶于它正在拉在原型属性中。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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
    
         }
    
    }
    

    【讨论】:

    • Bergi,感谢您的留言。这段代码给了我:对象标题:“Title1”描述:“Description1”......然后是一个完整的函数列表。
    • 呃,什么?有哪些功能?你伤害了Object.prototype
    • 例如函数 (a,b){return new e.fn.init(a,b,h)}。这是打印出属性的代码: for (var prop in listItem) { // 枚举其属性名称 // prop 是“Title”、“Description”等 console.log(listItem[prop]) // 是各自的值}
    • 我不是告诉过你不要(ab)使用jQuery吗? :) 如果你真的想使用 .each 包装器,var listItem = this;var listItem = val;
    猜你喜欢
    • 2016-08-11
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多