JSON anahtarlarının neden tırnak içinde olması gerektiğinin gerçek nedeni, ECMAScript 3'ün Tanımlayıcılarının anlambilimine dayanır.
Ayrılmış sözcükler , Nesne Değişmezlerinde tırnak işaretleri olmadan özellik adları olarak kullanılamaz , örneğin:
({function: 0})
({if: 0})
({true: 0})
Tırnak kullanırsanız, özellik adları geçerlidir:
({"function": 0})
({"if": 0})
({"true": 0})
Kendi Crockford bunu bu konuşmada açıklıyor , JSON standardını basit tutmak istiyorlardı ve tüm bu anlamsal kısıtlamalara sahip olmak istemiyorlardı:
....
İşte o zaman, alıntılanmamış isim problemini keşfettik. Görünüşe göre ECMA Script 3, rezerve edilmiş bir kelime politikasına sahip. Ayrılmış kelimelerin anahtar konumda alıntılanması gerekir ki bu gerçekten bir sıkıntıdır. Bunu bir standart haline getirmeye başladığımda, tüm ayrılmış kelimeleri standarda koymak zorunda kalmak istemedim çünkü bu gerçekten aptalca görünürdü.
O zamanlar insanları ikna etmeye çalışıyordum: evet, JavaScript'te uygulamalar yazabilirsiniz, aslında işe yarayacak ve bu iyi bir dil. Öyleyse aynı anda söylemek istemedim: ve yaptıkları şu aptalca şeye bak! Ben de bunun yerine anahtarları aktarmaya karar verdim.
Bu şekilde, ne kadar saçma olduğunu kimseye söylememize gerek kalmaz.
Bu nedenle, bu güne kadar anahtarlar JSON'da alıntılanıyor.
...
ECMAScript 5th Edition Standard bunu, şimdi bir ES5 uygulamasında düzeltir, ayrılmış kelimeler bile hem Nesne değişmezlerinde hem de üye erişiminde ( obj.function
ES5'te Ok) tırnak işaretleri olmadan kullanılabilir .
Kayıt için, bu standart bugünlerde yazılım satıcıları tarafından uygulanmaktadır, bu uyumluluk tablosunda bu özelliği hangi tarayıcıların içerdiğini görebilirsiniz ( Özellik adları olarak ayrılmış sözcüklere bakın )