1

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

"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 地址中的字符数。

任何建议将不胜感激。

4

3 回答 3

1

尝试:

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

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

于 2013-04-04T01:14:28.960 回答
0

首先,你没有两个列表,你有两个对象。对象与列表非常不同。您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.
}
于 2013-04-04T01:16:05.607 回答
0
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/

于 2013-04-04T01:18:41.033 回答