【问题标题】:How to parse JSON data when the property name is not known in advance?事先不知道属性名时如何解析JSON数据?
【发布时间】:2012-03-15 21:09:08
【问题描述】:

这是我在 jQuery 中的响应代码:

var response = $.parseJSON(response);

for (var i = 0; i < response.groupIds.length; i++) {
    console.log(response.groupIds[i], i);
}

每个response.groupIds[i] 的格式为{"unknown name":"unknown value"}

我希望在 javascript 中访问这两个数据位,当我事先不知道例如什么时,我该如何实现呢? unknown name是?

【问题讨论】:

    标签: javascript json properties


    【解决方案1】:

    使用Object.keys 检索键名的完整列表(数组)。一个 polyfill 可用here

    var group = response.groupIds[i];
    
    var allPropertyNames = Object.keys(group);
    for (var j=0; j<allPropertyNames.length; j++) {
        var name = allPropertyNames[j];
        var value = group[name];
        // Do something
    }
    

    您问题的回复格式仅包含一个键值对。然后代码可以简化为:

    var group = response.groupIds[i];
    var name = Object.keys(group)[0]; // Get the first item of the list;  = key name
    var value = group[name];
    

    如果您对列表不感兴趣,请使用for-i-in 循环with hasOwnProperty。必须使用最后一种方法,以排除从原型继承的属性。

    for (var name in group) {
        if (group.hasOwnProperty(name)) {
            var value = group[name];
            // Do something
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用for..in 循环:

      for( x in response.groupIds[i]) {
          // x is now your unknown key
          // response.groupIds[i][x] is the unknown value
      }
      

      由于对象只有一个属性,所以效果很好。

      【讨论】:

      • 当我尝试这个时它说我没有定义?
      • 你不是在第一个 for 循环中定义它吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2021-10-02
      • 2014-05-05
      • 1970-01-01
      相关资源
      最近更新 更多