جاوااسکریپت - دریافت اندازه شیء JSON


من یک شیء 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"}}}

پاسخ شماره ۱

شما میتوانید از چیزی شبیه به این استفاده کنید

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

var count = Object.keys(myObject).length;
console.log(count);

پاسخ شماره ۲

مشکل شما این است که شیء phones شما خاصیت length ندارد (مگر اینکه آن را جایی در JSON که برمیگردانید تعریف کنید) زیرا اشیاء با آرایهها یکسان نیستند، حتی زمانی که به عنوان آرایههای انجمنی استفاده میشوند. اگر شیء phones یک آرایه بود، طول داشت. شما دو گزینه دارید (شاید بیشتر).

  1. ساختار JSON خود را تغییر دهید (با فرض اینکه این ممکن است) به طوری که 'phones' شود

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

    (توجه داشته باشید که شناسه شمارهای برای هر تلفن وجود ندارد زیرا آنها در یک آرایه با اندیس صفر بازگردانده میشوند). در این پاسخ phones.length معتبر خواهد بود.

  2. در میان اشیاء موجود در شیء phones خود پیمایش کرده و آنها را در حین پیش رفتن شمارش کنید، به عنوان مثال

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

اگر فقط به مرورگرهای جدید هدفگیری میکنید، گزینه ۲ میتواند به این شکل باشد

پاسخ شماره ۳

شما نیازی به تغییر فرمت JSON خود ندارید.

جایگزین :

console.log(data.phones.length);

با :

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

پاسخ شماره ۴

استفاده از underscore.js را در نظر بگیرید. این به شما اجازه میدهد اندازه را بررسی کنید، یعنی مثل این:

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

پاسخ شماره ۵

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