Contoh: Apakah kode berikut ini valid terhadap JSON Spec ?
{
precision: "zip"
}
Atau haruskah saya selalu menggunakan sintaks berikut? (Dan jika demikian, mengapa?)
{
"precision": "zip"
}
Saya belum benar-benar menemukan sesuatu tentang ini dalam spesifikasi JSON. Meskipun mereka menggunakan tanda kutip di sekitar kunci mereka dalam contoh mereka.
json
specifications
standards-compliance
json5
usaha pembaptisan
sumber
sumber
Anda benar menggunakan string sebagai kuncinya. Berikut adalah kutipan dari RFC 4627 - Aplikasi / json Jenis Media untuk Notasi Objek JavaScript (JSON)
Baca seluruh RFC di sini .
sumber
A string begins and ends with quotation marks.
.Dari 2.2. Benda
dan mulai 2.5. String
Jadi saya akan mengatakan bahwa sesuai dengan standar: ya, Anda harus selalu mengutip kunci (meskipun beberapa parser mungkin lebih pemaaf)
sumber
Ya, kutipan wajib. http://json.org/ mengatakan:
sumber
Ya mereka melakukanya. Tetapi jika Anda membutuhkan yang lain, checkout JSON5 .
JSON5 adalah superset dari JSON yang memungkinkan sintaks ES5, termasuk:
Implementasi referensi JSON5 (
json5
paket npm ) menyediakanJSON5
objek yang memilikiparse
danstringify
metode dengan argumen dan semantik yang sama denganJSON
objek bawaan .sumber
Karena Anda dapat meletakkan notasi bertitik "parent.child" dan Anda tidak harus meletakkan parent ["child"] yang juga valid dan berguna, saya akan mengatakan kedua cara tersebut secara teknis dapat diterima. Pengurai semua harus melakukan keduanya dengan baik. Jika parser Anda tidak memerlukan tanda kutip pada kunci, maka mungkin lebih baik untuk tidak menempatkannya (menghemat ruang). Masuk akal untuk memanggil mereka string karena itulah mereka, dan karena tanda kurung memberi Anda kemampuan untuk menggunakan nilai untuk kunci pada dasarnya masuk akal untuk tidak melakukannya. Di Json Anda dapat menempatkan ...
baik-baik saja tanpa masalah, jika Anda membutuhkan nilai untuk kunci dan tidak ada yang dikutip tidak akan berhasil, jadi jika tidak, Anda tidak bisa, jadi Anda tidak akan jadi "Anda tidak perlu tanda kutip pada kunci". Bahkan jika itu benar untuk mengatakan mereka secara teknis string. Logika dan penggunaan berpendapat sebaliknya. Juga tidak secara resmi menampilkan Object {"someKey": "someValue"} untuk obj dalam contoh kita dijalankan dari konsol browser apa pun.
sumber
obj
di konsol, browser menampilkan beberapa representasi objek yang dapat dibaca manusia. Mungkin menampilkannya sebagai objek literal (seperti yang terjadi pada contoh Anda), atau mungkin menggunakan beberapa representasi lain, bahkan yang interaktif. Literal objek JavaScript tidak memerlukan tanda kutip di sekitar nama kunci jika kunci tersebut merupakan pengidentifikasi yang valid dan bukan kata yang dipesan. Namun, JSON selalu membutuhkan tanda kutip di sekitar nama-nama kunci.obj
di konsol, cobaJSON.stringify(obj)
. Sekarang Anda akan melihat representasi JSON yang valid dari objek, lengkap dengan nama kunci yang dikutip. Sebaliknya, untuk melihat apakah suatu string adalah JSON yang valid, cobaJSON.parse(string)
. Jika kunci tidak dikutip, ini akan menimbulkan pengecualian. MisalnyaJSON.parse('{"a":"b"}')
akan berhasil, tetapiJSON.parse('{a:"b"}')
akan gagal.var obj = {[keyName]:"someValue"};
sangat menarik! Saya tidak tahu Anda bisa melakukannya dalam objek JavaScript secara literal. Sedikit pemeriksaan menunjukkan bahwa ini adalah sesuatu yang baru di ES6 - Anda tidak dapat melakukannya di ES5.