我有一个看起来像这样的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)
}
但是我得到一个错误,说明未定义。谁能指点我这个问题?
谢谢你。
答案 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