Menurut json.org Crockford , objek JSON terdiri dari anggota , yang terdiri dari pasangan .
Setiap pasangan terbuat dari string dan nilai , dengan string didefinisikan sebagai:
String adalah urutan dari nol atau lebih karakter Unicode, dibungkus dalam tanda kutip ganda, menggunakan pelolosan garis miring terbalik. Karakter direpresentasikan sebagai string karakter tunggal. String sangat mirip dengan string C atau Java.
Namun dalam praktiknya, sebagian besar programmer bahkan tidak tahu bahwa kunci JSON harus diapit oleh tanda kutip ganda, karena sebagian besar browser tidak memerlukan penggunaan tanda kutip ganda.
Apakah masuk akal untuk repot-repot mengelilingi JSON Anda dengan tanda kutip ganda?
Contoh yang Valid:
{
"keyName" : 34
}
Berbeda dengan yang tidak valid:
{
keyName : 34
}
sumber
Jawaban:
Alasan sebenarnya tentang mengapa kunci JSON harus dalam tanda kutip, bergantung pada semantik Pengenal ECMAScript 3.
Kata yang dicadangkan tidak dapat digunakan sebagai nama properti di Object Literals tanpa tanda kutip, misalnya:
({function: 0}) // SyntaxError ({if: 0}) // SyntaxError ({true: 0}) // SyntaxError // etc...
Sedangkan jika Anda menggunakan tanda kutip nama propertinya valid:
({"function": 0}) // Ok ({"if": 0}) // Ok ({"true": 0}) // Ok
Crockford sendiri menjelaskannya dalam pembicaraan ini , mereka ingin menjaga standar JSON tetap sederhana, dan mereka tidak ingin memiliki semua batasan semantik di atasnya:
ECMAScript 5th Edition Standard memperbaikinya, sekarang dalam implementasi ES5, bahkan kata-kata yang sudah dipesan dapat digunakan tanpa tanda kutip, baik di Object literal dan akses anggota (
obj.function
Ok di ES5).Sekadar catatan, standar ini diterapkan saat ini oleh vendor perangkat lunak, Anda dapat melihat browser apa yang menyertakan fitur ini pada tabel kompatibilitas ini (lihat Kata yang dipesan sebagai nama properti )
sumber
parse
danstringify
metode.Ya, itu JSON tidak valid dan akan ditolak sebaliknya dalam banyak kasus, misalnya jQuery 1.4+ memiliki pemeriksaan yang membuat JSON yang tidak dikutip diam-diam gagal. Mengapa tidak patuh?
Mari kita ambil contoh lain:
{ myKey: "value" } { my-Key: "value" } { my-Key[]: "value" }
... semua ini akan valid dengan tanda kutip, mengapa tidak konsisten dan menggunakannya dalam semua kasus, menghilangkan kemungkinan masalah?
Satu lagi contoh umum di dunia pengembang web: Ada ribuan contoh HTML tidak valid yang ditampilkan di sebagian besar browser ... apakah hal itu membuat proses debug atau pemeliharaan menjadi lebih mudah? Tidak sama sekali, justru sebaliknya.
Juga @ Matthew membuat poin terbaik dari semua dalam komentar di bawah, ini sudah gagal, kunci yang tidak dikutip akan memunculkan kesalahan sintaks
JSON.parse()
di semua browser utama (dan yang lain yang menerapkannya dengan benar), Anda dapat mengujinya di sini .sumber
JSON.parse
juga akan menolaknya dengan benar.YAML, yang sebenarnya adalah superset dari JSON, mendukung apa yang ingin Anda lakukan. Meskipun ini superset, ini memungkinkan Anda membuatnya sesederhana yang Anda inginkan.
YAML menghirup udara segar dan mungkin sepadan dengan waktu Anda untuk melihatnya. Tempat terbaik untuk memulai adalah di sini: http://en.wikipedia.org/wiki/YAML
Ada libs untuk setiap bahasa di bawah matahari, termasuk JS, misalnya https://github.com/nodeca/js-yaml
sumber