отримати розмір об'єкта 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.