Получить длину / размер данных JSON

Я использовал следующие коды, чтобы получить мои данные 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 ответа

length работает для массива типов.

измените свой JSON на

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

length свойство поддерживается типом array.

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

Включите это в остальную часть условия. Это сделает его массивом.

Другие вопросы по тегам