如何使用JavaScript枚举列表的JSON列表

时间:2013-04-04 01:06:12

标签: javascript json list nested

我从第三方服务收到以下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地址中的字符数。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:1)

尝试:

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

在每个示例中,for循环都返回了密钥,您仍需要索引对象以获取相应的值。

答案 1 :(得分: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.
}

答案 2 :(得分: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/