Получить длину / размер данных 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);
Включите это в остальную часть условия. Это сделает его массивом.