访问Javascript json嵌套对象

时间:2017-05-24 19:25:26

标签: javascript arrays json tostring

我有一个看起来像这样的json

{
  "1": {
    "average percent match": 0.2916666667, 
    "match counts": 1.0, 
    "confidence": 0.25
  }, 
  "0": {
    "average percent match": 0.25, 
    "match counts": 1.0, 
    "confidence": 0.25 
  },
}

我尝试以这种方式访问​​json中的值。

JSON.stringify(tlist.toString("utf8"))

        for(var i = 0; i < tlist.length; i++){
        var totalCity = tlist[i]['match counts'];
        console.log(totalCity)
      } 

但是我得到一个错误,说明未定义。谁能指点我这个问题?

谢谢你。

4 个答案:

答案 0 :(得分:2)

输入对象是数组(或类似对象的数组)。因此,它没有任何称为length的属性。它只是一个具有键/值对的对象文字。所以你必须解析它,就像你对其他所有有效的json一样,然后遍历它的键,如下所示:

var input = "{\"1\": { \"average percent match\": 0.2916666667, \"match counts\": 1.0, \"confidence\": 0.25  }, \"0\": { \"average percent match\": 0.25, \"match counts\": 1.0, \"confidence\": 0.25 } }";

var obj = JSON.parse(input);

for(var key in obj){
    var totalCity = obj[key]['match counts'];
    console.log(totalCity);
}

<强>更新

一般来说,当我们循环访问对象的键时,正如帕特里克在评论中指出的那样,我们遵循以下模式:

for(var key in obj){
    if(obj.hasOwnProperty(key)){
        // ....
    }
}

我们确实需要这个额外的检查,以避免枚举obj原型链中对象上定义的属性。在这种情况下,由于您的对象是 proto 是Object的简单对象,因此不需要这样做。这就是我没有包含它的原因。

如需深入分析,请查看以下链接:

答案 1 :(得分:1)

那不是阵列。您必须使用它的密钥才能访问。

var x = {
  "0": {a: 'b'},
  "1": {a: 'b'},
}

for(key in x) {
  console.log(x[key]) //outputs {a: 'b'}
}

答案 2 :(得分:1)

对象中的键值是string键入的:

{   // Keys wrapped in "" are strings
    "1": { ... },
    "2": { ... }
}

即使javascript是非严格类型的语言,它仍然具有内部类型,并且对象不会尝试转换访问密钥类型,它们将对密钥执行严格检查以确定它是否存在。当发生严格检查时,不仅要考虑该值,还要考虑类型;它是=====之间的区别,因为===评估为true,值和类型必须匹配。

但是当您在循环中访问它们时,您尝试使用number类型进行访问:

// i is defined as the number 0, and incremented by 1 on each iteration
for(var i = 0; i < tlist.length; i++){
    var totalCity = tlist[i]['match counts'];
    ...
}

但请不要担心,您仍然可以保持循环,只需在您访问对象时将i转换为正确的类型!

for(var i = 0; i < tlist.length; i++){
    // Adding an empty string to a number will convert said number into a string
    var totalCity = tlist[i + '']['match counts'];
    ...
}

答案 3 :(得分:1)

这样可行:请将链接放到jquery,或使用下面的脚本链接。

useSecurity