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})
({if: 0})
({true: 0})
Sedangkan jika Anda menggunakan tanda kutip nama propertinya valid:
({"function": 0})
({"if": 0})
({"true": 0})
Crockford sendiri menjelaskannya dalam pembicaraan ini , mereka ingin menjaga standar JSON tetap sederhana, dan mereka tidak ingin memiliki semua batasan semantik di atasnya:
....
Saat itulah kami menemukan masalah nama yang tidak dikutip. ECMA Script 3 ternyata memiliki kebijakan kata khusus yang mendera. Kata yang dicadangkan harus dikutip di posisi kunci, yang benar-benar mengganggu. Ketika saya sempat merumuskan ini menjadi standar, saya tidak ingin harus memasukkan semua kata yang dicadangkan ke dalam standar, karena itu akan terlihat sangat bodoh.
Pada saat itu, saya mencoba meyakinkan orang: ya, Anda dapat menulis aplikasi dalam JavaScript, ini benar-benar akan berfungsi dan itu adalah bahasa yang bagus. Saya tidak ingin mengatakan, lalu, pada saat yang sama: dan lihatlah hal bodoh yang mereka lakukan! Jadi saya memutuskan, mari kita kutip saja kuncinya.
Dengan begitu, kita tidak perlu memberi tahu siapa pun tentang betapa dahsyatnya itu.
Itulah mengapa, hingga hari ini, kunci dikutip dalam JSON.
...
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 )