отримати розмір об'єкта json


234

У мене є об'єкт 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?
— Джо

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

Відповіді:


555

Можна використовувати щось подібне

<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
— Шаймол Бапарі

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, як і вище: "телефони": [{"номер": "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. Якщо ви виконаєте наведені вище твердження, це призведе до помилки "Несподіваний маркер o в Json". Для обчислення довжини json ви можете безпосередньо зробити var length = Object.keys (json) .length.
— Aayushi


-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!
— Georgi-it
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.