Bagaimana cara mendapatkan nilai kunci dalam objek JSON dan panjang objek menggunakan JavaScript.
Sebagai contoh:
[
{
"amount": " 12185",
"job": "GAPA",
"month": "JANUARY",
"year": "2010"
},
{
"amount": "147421",
"job": "GAPA",
"month": "MAY",
"year": "2010"
},
{
"amount": "2347",
"job": "GAPA",
"month": "AUGUST",
"year": "2010"
}
]
Di sini, panjang array ini adalah 3. Untuk mendapatkan nilai tidak masalah ([0].amount)
, dalam indeks[0]
itu memiliki 3 pasangan nilai nama.
Jadi, saya perlu mendapatkan nama (seperti jumlah atau pekerjaan ... total empat nama) dan juga untuk menghitung berapa banyak nama yang ada?
Json pada dasarnya direpresentasikan sebagai array asosiasi dalam Javascript. Hanya perlu mengulanginya untuk membaca kunci atau nilai
var JsonObj= { "one":1, "two":2, "three":3, "four":4, "five":5 };
//read key
for (var key in JsonObj) {
console.log(key);
console.log(JsonObj[key]);
}
Pertama, Anda tidak berurusan dengan objek JSON. Anda berurusan dengan objek JavaScript. JSON adalah notasi tekstual, tetapi jika contoh kode Anda berfungsi ([0].amount
), Anda sudah deserialisasi notasi itu menjadi grafik objek JavaScript. (Apa yang Anda kutip bukanlah JSON yang valid sama sekali; dalam JSON, kunci harus dalam tanda kutip ganda. Apa yang Anda kutip adalah literal objek JavaScript, yang merupakan superset dari JSON).
Di sini, panjang larik ini adalah 2.
Tidak, itu 3.
Jadi, saya perlu mendapatkan nama (seperti jumlah atau pekerjaan... benar-benar empat nama) dan juga untuk menghitung berapa banyak nama yang ada?
Jika Anda menggunakan lingkungan yang memiliki dukungan penuh ECMAScript5, Anda dapat menggunakan Object.keys
(spec | MDN) untuk mendapatkan enumerable keys untuk salah satu objek sebagai array. Jika tidak (atau jika Anda hanya ingin mengulang-ulangnya daripada mendapatkan lariknya), Anda dapat menggunakan for..in
:
var entry;
var name;
entry = array[0];
for (name in entry) {
// here, `name` will be "amount", "job", "month", then "year" (in no defined order)
}
Contoh kerja yang lengkap:
(function() {
var array = [
{
amount: 12185,
job: "GAPA",
month: "JANUARY",
year: "2010"
},
{
amount: 147421,
job: "GAPA",
month: "MAY",
year: "2010"
},
{
amount: 2347,
job: "GAPA",
month: "AUGUST",
year: "2010"
}
];
var entry;
var name;
var count;
entry = array[0];
display("Keys for entry 0:");
count = 0;
for (name in entry) {
display(name);
++count;
}
display("Total enumerable keys: " + count);
// === Basic utility functions
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
})();
Karena anda berurusan dengan objek mentah, perulangan for..in
di atas tidak masalah (kecuali jika seseorang telah melakukan dosa dengan mengotak-atik Object.prototype
, tetapi mari kita asumsikan tidak). Tetapi jika objek yang Anda inginkan kuncinya juga mewarisi properti yang dapat dihitung dari prototipenya, Anda dapat membatasi perulangan hanya untuk objek tersebut (dan bukan kunci dari prototipenya) dengan menambahkan panggilan hasOwnProperty
di sana:
for (name in entry) {
if (entry.hasOwnProperty(name)) {
display(name);
++count;
}
}
Ketika Anda mengurai representasi JSON, itu akan menjadi JavaScript array objek.
Karena itu, Anda dapat menggunakan properti .length
dari larik JavaScript untuk melihat berapa banyak elemen yang terkandung, dan menggunakan loop for
untuk menghitungnya.