lấy kích thước của đối tượng json


233

tôi có một đối tượng json được trả về bởi một yêu cầu AJAX và tôi gặp một số rắc rối với .lengthnó vì nó tiếp tục quay trở lại undefined. Chỉ tự hỏi nếu tôi đang sử dụng nó đúng:

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

Cả hai đều trở về undefinedmặc dù chúng là đối tượng hợp lệ.

Cập nhật:
Mẫu của đối tượng JSON được trả về:

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

Bạn có thể gửi một mẫu JSON được trả về không?
Joe

Tôi không chắc, không phải tôi. Tôi nghĩ rằng câu hỏi của bạn là tốt, là tốt.
Joe

Câu trả lời:


554

Bạn có thể sử dụng một cái gì đó như thế này

<script type="text/javascript">

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

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

61
@Matt, KHÔNG bắt buộc mọi mã phải hoạt động trong IE 7 hoặc 8. Những nền tảng không đầy đủ hoặc không chuẩn này đang được bảo vệ chỉ là nhược điểm.
Olofu Mark

5
@OlofuMark không phải ai cũng có thể chọn trình duyệt nào họ đang sử dụng (ví dụ: mạng bị khóa, phụ thuộc DLL DLL phiên bản được sử dụng bởi các ứng dụng nội bộ). Nếu việc cung cấp các trình duyệt lỗi thời đòi hỏi nỗ lực đáng kể thì việc bỏ qua chúng có thể được biện minh, nhưng trong trường hợp tầm thường như vậy thì điều này thật bất lịch sự
tomfumb

7
@OlofuMark Mặc dù không bắt buộc phải hỗ trợ các phiên bản đó, nhưng các nhà phát triển nên biết khi nào mã họ sản xuất sẽ không hoạt động trên các phiên bản nhất định để họ có thể quyết định có tính đến điều đó hay không.
David Navarre

Thật tuyệt khi thấy một giải pháp không yêu cầu JSON phải có các mảng lồng nhau. Tôi nghĩ rằng toàn bộ quan điểm của JSON là để mọi thứ trở thành một đối tượng.
Healforgreen

đó là một giải pháp tuyệt vời để có được chiều dài của các vật thể json
Shaymol Bapary

54

Vấn đề của bạn là đối tượng điện thoại của bạn không có thuộc tính độ dài (trừ khi bạn xác định nó ở đâu đó trong JSON mà bạn trả về) vì các đối tượng không giống như mảng, ngay cả khi được sử dụng làm mảng kết hợp. Nếu đối tượng điện thoại là một mảng, nó sẽ có độ dài. Bạn có hai lựa chọn (có thể nhiều hơn).

  1. Thay đổi cấu trúc JSON của bạn (giả sử điều này là có thể) để 'điện thoại' trở thành

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

    (lưu ý rằng không có số nhận dạng được đánh số từ cho mỗi điện thoại vì chúng được trả về trong một mảng có chỉ số 0). Trong phản hồi phones.lengthnày sẽ có hiệu lực.

  2. Lặp lại qua các đối tượng có trong đối tượng điện thoại của bạn và đếm chúng khi bạn đi, ví dụ:

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

Nếu bạn chỉ nhắm mục tiêu trình duyệt mới, tùy chọn 2 có thể trông như thế này


Làm cách nào tôi có được độ dài của đối tượng JSON với giải pháp đầu tiên được cung cấp rằng đối tượng JSON của tôi được lưu trữ trong một biến có tên là jsonObject và tôi có cùng JSON như trên: "phone": [{"number": "XXXXXXXXXX" , "loại": "di động"}, {"số": "XXXXXXXXXX", "loại": "di động"}]
Erick

29

Cân nhắc sử dụng underscore.js . Nó sẽ cho phép bạn kiểm tra kích thước tức là như thế:

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

24

bạn không cần thay đổi định dạng JSON của mình.

thay thế:

console.log(data.phones.length);

với:

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
Đây là một đối tượng json đã được phân tích cú pháp. Nếu bạn thực hiện các câu lệnh trên, nó sẽ báo lỗi 'Mã thông báo không mong đợi trong Json'. Để tính độ dài của json, bạn có thể trực tiếp thực hiện var length = Object.keys (json) .length.
Aayushi


-3

sử dụng cái này

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

hoặc là

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

6
length () không phải là một chức năng đối tượng 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
chờ đợi một ngoại lệ để cho bạn biết danh sách của bạn đã hết các yếu tố là một ý tưởng tồi và cách tiếp cận này sẽ âm thầm đưa ra số đếm sai nếu bất kỳ yếu tố nào (thậm chí cuối cùng) bị thiếu TechnologyIdtài sản
tomfumb

1
Mã này rất tệ, đến nỗi tôi thậm chí sẽ không bình luận gì thêm. Bình chọn -1!
Georgi-it
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.