【问题标题】:How to enumerate a JSON list of list using JavaScript如何使用 JavaScript 枚举 JSON 列表列表
【发布时间】:2013-03-25 22:02:42
【问题描述】:

我从第三方服务收到以下 JSON 字符串。 (这是来自 JSON 字符串的有问题的 sn-p)

"last_data_store" : { 
    "02:00:00:00:2a:1a" : 
        { "K" : 1364400231,
          "a" : 4.5,
          "b" : 67,
          "g" : 15634
        },
    "70:ee:50:00:2c:b8" : {
          "'" : 1003.1,
           "K" : 1364400233,
           "S" : 36,
           "a" : 16.199999999999999,
           "b" : 44,
           "e" : 1013.6,
           "g" : 11244,
           "h" : 413
     }
}

如何递归解析这个,以便提取键:值对?

我可以遍历 last_data_store 中的两个列表“对象”中的每一个

LastDataStore = obj.body.devices[0].last_data_store;
var index = 0;
for (data in LastDataStore) {
console.log(data);
index ++;
}

但我只得到 MAC 地址字符串(例如“02:00:00:00:2a:1a”)

如果我尝试类似的东西

LastDataStore = obj.body.devices[0].last_data_store;
var index = 0;
for (data in LastDataStore) {
console.log(data.K);
index ++;
}

我收到一个“未定义”的值。

类似地,如果我使用以下内容

LastDataStore = obj.body.devices[0].last_data_store;
var index = 0;
for (data in LastDataStore) {
console.log(data);
index ++;
      for (foobar in data) {
          console.log(foobar);
      }
}

我只得到数字 0 到 16,我认为这是 MAC 地址中的字符数。

任何建议将不胜感激。

【问题讨论】:

    标签: javascript json list nested


    【解决方案1】:

    首先,你没有两个列表,你有两个对象。对象与列表非常不同。您使用的 for...in 循环是返回属性名称(键)而不是值,这就是 data.K 未定义的原因。

    var prop, value;
    for (prop in LastDataStore) {
        value = LastDataStore[prop];
        console.log(value.K); // this works now, you've fetched the object with the line above.
    }
    

    【讨论】:

    • 您的 value 变量未使用。
    • @Alan 已修复。我知道我错过了什么。
    • @Alan 我只是在这里左右失败。我应该停止尝试吃饭并同时提供帮助。
    • @Alan 哈哈:P 太真实了。我刚买了一件衬衫,上面写着“吃饭、睡觉、编码、游戏”
    【解决方案2】:

    试试:

    LastDataStore = obj.body.devices[0].last_data_store;
    var index = 0;
    for (data in LastDataStore) {
      console.log(LastDataStore[data]);
      index ++;
    }
    

    在您的每个示例中,您的 for 循环正在返回键,您仍然需要索引到您的对象以获得相应的值。

    【讨论】:

      【解决方案3】:
      LastDataStore = obj.body.devices[0].last_data_store;
      for (x in LastDataStore) {
          for (y in LastDataStore[x]) {
              console.log("key: " + y + ", value: " + LastDataStore[x][y])
          }
      }
      

      示例:http://jsfiddle.net/hZ7QB/

      【讨论】:

      • 这行得通。非常感谢。 (现在是时候在连接适当的 UI 之前急需 zzzz 了)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多