Baru-baru ini mulai menggali JSON, dan saat ini saya mencoba menggunakan nomor sebagai "pengenal", yang tidak berfungsi dengan baik. foo:"bar"
berfungsi dengan baik, sementara 0:"bar"
tidak.
var Game = {
status: [
{
0:"val",
1:"val",
2:"val"
},
{
0:"val",
1:"val",
2:"val"
}
]
}
alert(Game.status[0].0);
Apakah ada cara untuk melakukannya dengan cara berikut? Sesuatu seperti Game.status[0].0
Akan membuat hidup saya jauh lebih mudah. Tentu saja ada cara lain untuk menyiasatinya, tetapi cara ini lebih disukai.
Game.status[0]
sebuah array? Maka sintaks Anda akan menjadiGame.status[0][0]
.Jawaban:
JSON hanya mengizinkan nama kunci menjadi string. String tersebut dapat terdiri dari nilai numerik.
Anda tidak menggunakan JSON. Anda memiliki objek JavaScript literal. Anda dapat menggunakan pengenal untuk kunci, tetapi pengenal tidak dapat dimulai dengan angka. Anda masih bisa menggunakan string.
var Game={ "status": [ { "0": "val", "1": "val", "2": "val" }, { "0": "val", "1": "val", "2": "val" } ] }
Jika Anda mengakses properti dengan notasi titik, maka Anda harus menggunakan pengenal. Menggunakan notasi braket persegi sebagai gantinya:
Game.status[0][0]
.Tetapi mengingat data itu, array akan tampak lebih masuk akal.
var Game={ "status": [ [ "val", "val", "val" ], [ "val", "val", "val" ] ] }
sumber
Game.status[0].0
Game.status[0][0]
.You aren't using JSON though. You have a JavaScript object literal.
Apakah satu-satunya perbedaanvar =
atau apakah ada lebih banyak perbedaan antara JSON dan literal objek JS? Apakah objek JS pada dasarnya JSON disimpan dalam variabel?Pertama, ini bukan JSON: JSON mengamanatkan bahwa semua kunci harus berupa string.
Kedua, array biasa melakukan apa yang Anda inginkan:
var Game = { status: [ [ "val", "val", "val" ], [ "val", "val", "val" ] }
akan bekerja, jika Anda menggunakan
Game.status[0][0]
. Anda tidak dapat menggunakan angka dengan notasi titik (.0
).Atau, Anda dapat mengutip angka-angka (yaitu
{ "0": "val" }...
); Anda akan memiliki objek biasa, bukan Array, tetapi sintaks yang sama akan berfungsi.sumber
Mungkin Anda membutuhkan array?
var Game = { status: [ ["val", "val","val"], ["val", "val", "val"] ] } alert(Game.status[0][0]);
sumber
Ketika nama properti objek Javascript tidak dimulai dengan garis bawah atau huruf, Anda tidak dapat menggunakan notasi titik (seperti
Game.status[0].0
), dan Anda harus menggunakan notasi alternatif, yaituGame.status[0][0]
.Satu catatan berbeda, apakah Anda benar-benar membutuhkannya untuk menjadi objek di dalam larik status? Jika Anda menggunakan objek seperti array, mengapa tidak menggunakan array yang sebenarnya?
sumber
JSON mengatur jenis kunci menjadi string. Tujuannya untuk mendukung notasi titik untuk mengakses anggota objek.
Misalnya, person = {"height": 170, "weight": 60, "age": 32}. Anda dapat mengakses anggota berdasarkan person.height, person.weight, dll. Jika JSON mendukung kunci nilai, maka akan terlihat seperti person.0, person.1, person.2.
sumber
JSON adalah "JavaScript Object Notation". JavaScript menentukan kuncinya harus berupa string atau simbol.
Kutipan berikut dari MDN Docs menggunakan istilah "kunci / properti" untuk merujuk pada apa yang lebih sering saya dengar sebagai "kunci / nilai".
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects
sumber
Bagaimana dengan
Game.status[0][0] or Game.status[0]["0"] ?
Apakah salah satu dari ini berfungsi?
PS: Apa yang Anda miliki dalam pertanyaan Anda adalah Objek Javascript, bukan JSON. JSON adalah versi 'string' dari Objek Javascript.
sumber