получить размер объекта JSON


235

у меня есть объект json, который возвращается по запросу AJAX, и у меня возникают некоторые проблемы с ним, .lengthпотому что он продолжает возвращаться undefined. Просто интересно, правильно ли я это использую:

console.log(data.length);
console.log(data.phones.length);

Они оба возвращаются, undefinedдаже если они являются действительными объектами.

Обновление:
образец возвращенного объекта JSON:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}

Можете ли вы опубликовать образец возвращенного JSON?
— Джо

Я не уверен, не я. Я думаю, что ваш вопрос тоже в порядке.
— Джо

Ответы:


556

Вы можете использовать что-то вроде этого

<script type="text/javascript">

  var myObject = {'name':'Kasun', 'address':'columbo','age': '29'}

  var count = Object.keys(myObject).length;
  console.log(count);
</script>

62
@ Matt, НЕ обязательно для каждого кода работать в IE 7 или 8. Эти неадекватные или нестандартные защищаемые платформы являются просто недостатками.
— Олофу Марк

5
@OlofuMark Не все могут выбирать, какой браузер они используют (например, закрытые сети, зависимости версий DLL-библиотек IE, используемые в собственных приложениях). Если адаптация устаревших браузеров требует значительных усилий, игнорирование их может быть оправдано, но в таком тривиальном случае, как этот, просто грубо не делать
— tomfumb

7
@OlofuMark Хотя поддержка этих версий не требуется, разработчики должны знать, когда создаваемый ими код не будет работать на определенных версиях, чтобы они могли решить, принять это во внимание или нет.
— Дэвид Наварр

Приятно видеть решение, которое не требует, чтобы JSON имел вложенные массивы. Я думал, что весь смысл JSON в том, чтобы все было объектом.
— Healforgreen

это фантастическое решение для получения длины объектов json
— Shaymol Bapary

54

Ваша проблема в том, что ваш телефонный объект не имеет свойства длины (если вы не определите его где-то в возвращаемом вами JSON), поскольку объекты не совпадают с массивами, даже если они используются в качестве ассоциативных массивов. Если бы объект телефонов был массивом, он имел бы длину. У вас есть два варианта (возможно, больше).

  1. Измените структуру JSON (при условии, что это возможно), чтобы «телефоны» стали

    "phones":[{"number":"XXXXXXXXXX","type":"mobile"},{"number":"XXXXXXXXXX","type":"mobile"}]

    (обратите внимание, что для каждого телефона нет нумерованного идентификатора, поскольку они возвращаются в 0-индексированном массиве). В этом ответ phones.lengthбудет действительным.

  2. Перебирайте объекты, содержащиеся в объекте вашего телефона, и считайте их по мере необходимости, например:

    var key, count = 0;
    for(key in data.phones) {
      if(data.phones.hasOwnProperty(key)) {
        count++;
      }
    }

Если вы ориентируетесь только на новые браузеры, вариант 2 может выглядеть следующим образом


Как получить длину объекта JSON с первым решением, учитывая, что мой объект JSON хранится в переменной с именем jsonObject, и у меня тот же JSON, что и выше: "phones": [{"number": "XXXXXXXXXX" , "type": "mobile"}, {"number": "XXXXXXXXXX", "type": "mobile"}]
— Эрик

29

Подумайте об использовании underscore.js . Это позволит вам проверить размер, например, так:

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3

24

Вам не нужно менять формат JSON.

заменить:

console.log(data.phones.length);

с участием:

console.log( Object.keys( data.phones ).length ) ;

16
var json=[{"id":"431","code":"0.85.PSFR01215","price":"2457.77","volume":"23.0","total":"565.29"},{"id":"430","code":"0.85.PSFR00608","price":"1752.45","volume":"4.0","total":"70.1"},{"id":"429","code":"0.84.SMAB00060","price":"4147.5","volume":"2.0","total":"82.95"},{"id":"428","code":"0.84.SMAB00050","price":"4077.5","volume":"3.0","total":"122.32"}] 
var obj = JSON.parse(json);
var length = Object.keys(obj).length; //you get length json result 4

2
Это уже проанализированный объект JSON. Если вы выполните приведенные выше операторы, вы получите ошибку «Неожиданный токен в Json». Для вычисления длины json вы можете напрямую сделать var length = Object.keys (json) .length.
— Ааюши


-3

использовать этот

//for getting length of object
 int length = jsonObject.length();

или

//for getting length of array
 int length = jsonArray.length();

6
length () не является функцией объекта JSON
— Sunding Wei

-5
$(document).ready(function () {
    $('#count_my_data').click(function () {
        var count = 0;
        while (true) {
             try {
                var v1 = mydata[count].TechnologyId.toString();
                count = count + 1;
            }
            catch (e)
            { break; }
        }
        alert(count);
    });
});

1
ожидание исключения, сообщающего о том, что в вашем списке исчерпаны элементы, - плохая идея, и этот подход автоматически выдаст неверное число, если какой-либо элемент (даже последний) пропустит TechnologyIdсвойство
— tomfumb

1
Этот код настолько плох, что я даже не буду комментировать дальше. Проголосовал -1!
— Георгий-это
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.