我使用以下代码来获取某些节点的json数据。
console.log(Object.keys(data.Top["person"]).length);
在json数据数组的以下结构中工作正常:
data:{"Top":{"person":[{"A":"a","B":"b"},{"A":"a","B":"b"}]}}
但是当此人只有一个节点时,它总是向我显示答案2
,应该回答1
。
data:{"Top":{"person":{"A":"a","B":"b"}}}
是否可以解决此错误?
答案 0 :(得分:0)
length
属性。
data:{"Top":{"person":[{"A":"a","B":"b"},{"A":"a","B":"b"}]}}
如果person
是[ ]
所附的数组
data:{"Top":{"person":{"A":"a","B":"b"}}}
person
只是一个对象。因此,length
为undefined
。
如果您要使用字符串或格式化创建json,请务必在[
属性中加入]
和person
。
<强>的jsfiddle 强> https://jsfiddle.net/d6pqnckh/
还使用JSON格式化程序来测试JSON结构。
<强>更新强>
因为您不确定JSON结构。您可以做的是在访问person
的长度之前检查它是否是数组或对象。
if(Object.prototype.toString.call(data.Top.person) === '[object Array]')
alert(data.Top.person.length);
//It is an array
else
alert("I AM OBJECT"); //It is of an object type
更新小提琴:https://jsfiddle.net/wys7awuz/
无论 https://jsfiddle.net/ofkboh6k/
,都要将其设为数组 var p = data.Top.person;
delete data.Top.person;
data.Top.person = [];
data.Top.person.push(p);
alert(data.Top.person.length);
将此包含在条件的其他部分中。它会使它成为一个数组。
答案 1 :(得分:0)
length
适用于类型数组。
将您的JSON更改为
data:{"Top":{"person":[{"A":"a","B":"b"}]}}