dapatkan ukuran objek json

235

Saya punya objek json yang dikembalikan oleh permintaan AJAX dan saya mengalami beberapa masalah dengan .lengthkarena itu terus kembali undefined. Hanya ingin tahu apakah saya menggunakannya dengan benar:

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

Mereka berdua kembali undefinedmeskipun mereka adalah objek yang valid.

Pembaruan:
Contoh objek JSON yang dikembalikan:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}
nkcmr
sumber
Bisakah Anda memposting sampel JSON yang dikembalikan?
Joe
Saya tidak yakin, bukan saya. Saya pikir pertanyaan Anda juga baik-baik saja.
Joe

Jawaban:

556

Anda dapat menggunakan sesuatu seperti ini

<script type="text/javascript">

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

  var count = Object.keys(myObject).length;
  console.log(count);
</script>
Kasun
sumber
62
@ Matt, BUKAN ini wajib untuk setiap kode untuk bekerja di IE 7 atau 8. Platform yang tidak memadai atau tidak standar ini dilindungi hanyalah kekurangan.
Olofu Mark
5
@OlofuMark tidak semua orang dapat memilih browser mana yang mereka gunakan (mis. Jaringan terkunci, dependensi IE DLL versi yang digunakan oleh aplikasi internal). Jika mengakomodasi browser yang sudah ketinggalan zaman memerlukan upaya yang signifikan maka mengabaikannya dapat dibenarkan, tetapi dalam kasus sepele seperti ini, tidak sopan untuk tidak
tomfumb
7
@OlofuMark Meskipun tidak diperlukan untuk mendukung versi tersebut, pengembang harus tahu kapan kode yang mereka hasilkan tidak akan berfungsi pada versi tertentu sehingga mereka dapat memutuskan apakah akan mempertimbangkannya atau tidak.
David Navarre
Sangat menyenangkan melihat solusi yang tidak memerlukan JSON untuk memiliki array bersarang. Saya pikir inti dari JSON adalah untuk membuat semuanya menjadi objek.
Healforgreen
ini adalah solusi fantastis untuk mendapatkan panjang objek json
Shaymol Bapary
54

Masalah Anda adalah objek ponsel Anda tidak memiliki properti panjang (kecuali jika Anda mendefinisikannya di suatu tempat di JSON yang Anda kembalikan) sebagai objek tidak sama dengan array, bahkan ketika digunakan sebagai array asosiatif. Jika objek ponsel adalah array, ia akan memiliki panjang. Anda memiliki dua opsi (mungkin lebih).

  1. Ubah struktur JSON Anda (dengan asumsi ini mungkin) sehingga 'ponsel' menjadi

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

    (perhatikan tidak ada pengidentifikasi nomor-kata untuk setiap telepon karena dikembalikan dalam array berindeks 0). Dalam tanggapan ini phones.lengthakan valid.

  2. Iterasi melalui objek yang ada dalam objek ponsel Anda dan hitung saat Anda pergi, misalnya

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

Jika Anda hanya menargetkan peramban baru, opsi 2 dapat terlihat seperti ini

Tomfumb
sumber
Bagaimana saya akan mendapatkan panjang dari objek JSON dengan solusi pertama mengingat bahwa objek JSON saya disimpan dalam variabel yang disebut jsonObject dan saya memiliki JSON yang sama seperti di atas: "telepon": [{"number": "XXXXXXXXXX" , "type": "mobile"}, {"number": "XXXXXXXXXX", "type": "mobile"}]
Erick
29

Pertimbangkan untuk menggunakan underscore.js . Ini akan memungkinkan Anda untuk memeriksa ukurannya yaitu seperti itu:

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

Anda tidak perlu mengubah format JSON Anda.

menggantikan:

console.log(data.phones.length);

dengan:

console.log( Object.keys( data.phones ).length ) ;
kkk
sumber
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
surya handoko
sumber
2
Ini adalah objek json yang sudah diuraikan. Jika Anda menjalankan pernyataan di atas, itu akan memberi Anda kesalahan 'Token tidak terduga di Json'. Untuk menghitung panjang json, Anda dapat langsung melakukan var length = Object.keys (json) .length.
Aayushi
1

coba ini

$.parseJSON(data).length
Hafsal Rh
sumber
-3

gunakan yang ini

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

atau

//for getting length of array
 int length = jsonArray.length();
Mahesh Gawhane
sumber
6
length () bukan funtion objek 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);
    });
});
pengguna2674838
sumber
1
menunggu pengecualian untuk memberi tahu Anda bahwa daftar Anda telah kehabisan elemen adalah ide yang buruk, dan pendekatan ini akan diam-diam memberikan perhitungan yang salah jika ada elemen (bahkan yang terakhir) yang kehilangan TechnologyIdproperti
tomfumb
1
Kode ini sangat buruk, sehingga saya bahkan tidak akan berkomentar lebih lanjut. Terpilih -1!
Georgi-it