访问 Javascript json 嵌套对象
Accessing Javascript json nested object
我有一个 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)
}
但我收到一条错误消息,提示未定义。谁能指出问题所在?
谢谢。
输入对象不是数组(或类似对象的数组)。因此它没有任何 属性 称为 length
。它只是一个带有 key/value 对的对象字面量。所以你必须像对待所有其他有效的 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 是对象,因此不需要这样做。这就是我没有包含它的原因。
要对此进行深入分析,请查看以下链接:
那不是数组。您必须使用它的密钥才能访问。
var x = {
"0": {a: 'b'},
"1": {a: 'b'},
}
for(key in x) {
console.log(x[key]) //outputs {a: 'b'}
}
您对象中的键值 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'];
...
}
这会起作用:请将 link 添加到 jquery,或使用下面的脚本 link。
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
var data = {
"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 total =0;
$.each(data, function (i, item) {
total += item["match counts"];
});
alert("Total of match counts is: " + total);
我有一个 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)
}
但我收到一条错误消息,提示未定义。谁能指出问题所在?
谢谢。
输入对象不是数组(或类似对象的数组)。因此它没有任何 属性 称为 length
。它只是一个带有 key/value 对的对象字面量。所以你必须像对待所有其他有效的 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 是对象,因此不需要这样做。这就是我没有包含它的原因。
要对此进行深入分析,请查看以下链接:
那不是数组。您必须使用它的密钥才能访问。
var x = {
"0": {a: 'b'},
"1": {a: 'b'},
}
for(key in x) {
console.log(x[key]) //outputs {a: 'b'}
}
您对象中的键值 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'];
...
}
这会起作用:请将 link 添加到 jquery,或使用下面的脚本 link。
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
var data = {
"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 total =0;
$.each(data, function (i, item) {
total += item["match counts"];
});
alert("Total of match counts is: " + total);