получить размер объекта 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.