获取json数据的长度/大小

时间:2016-02-04 01:55:33

标签: json datalength

我使用以下代码来获取某些节点的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"}}}

是否可以解决此错误?

2 个答案:

答案 0 :(得分:0)

类型数组支持

length属性。

data:{"Top":{"person":[{"A":"a","B":"b"},{"A":"a","B":"b"}]}}如果person[ ]所附的数组

data:{"Top":{"person":{"A":"a","B":"b"}}} person只是一个对象。因此,lengthundefined

如果您要使用字符串或格式化创建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"}]}}