2

我已经使用以下代码来获取某些节点的 json 数据。

console.log(Object.keys(data.Top["person"]).length);

在 json 数据数组的以下结构中可以正常工作:

data:{"Top":{"person":[{"A":"a","B":"b"},{"A":"a","B":"b"}]}}

但是当这个人只有一个节点时,它总是2向我显示答案,应该是 answer 1

data:{"Top":{"person":{"A":"a","B":"b"}}}

有可能解决这个错误吗?

4

2 回答 2

0

length类型数组支持属性。

data:{"Top":{"person":[{"A":"a","B":"b"},{"A":"a","B":"b"}]}}在这种情况下,person数组包含在[ ]

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

如果您要使用字符串创建 json 或对其进行格式化,请确保包含[]forperson属性。

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);

将此包含在条件的其他部分中。它将使其成为一个数组。

于 2016-02-04T02:25:24.853 回答
0

length适用于类型数组。

将您的 JSON 更改为

data:{"Top":{"person":[{"A":"a","B":"b"}]}}
于 2016-02-04T02:26:03.903 回答