Справжня причина того, чому ключі JSON мають бути в лапках, покладається на семантику Ідентифікаторів ECMAScript 3.
Зарезервовані слова не можна використовувати як імена властивостей в Object Literals без лапок, наприклад:
({function: 0})
({if: 0})
({true: 0})
Якщо ви використовуєте лапки, імена властивостей дійсні:
({"function": 0})
({"if": 0})
({"true": 0})
Власний Крокфорд пояснює це в цій бесіді , вони хотіли спростити стандарт JSON, і вони не хотіли б мати всіх цих семантичних обмежень на нього:
....
Тоді ми виявили проблему імен без котирувань. Виявляється, ECMA Script 3 має політику зарезервованих слів. Зарезервовані слова потрібно цитувати у ключовій позиції, що насправді є неприємністю. Коли я дійшов до того, щоб сформулювати це в стандарт, я не хотів вносити всі зарезервовані слова в стандарт, тому що це виглядало б по-справжньому дурним.
У той час я намагався переконати людей: так, ви можете писати програми на JavaScript, це насправді буде працювати і це гарна мова. Тоді я не хотів сказати одночасно: і подивіться на цю справді дурну річ, яку вони зробили! Тож я вирішив, натомість давайте просто процитуємо ключі.
Таким чином, ми не повинні нікому говорити про те, наскільки це зловмисно.
Ось чому донині ключі цитуються в JSON.
...
ECMAScript 5th Edition Standard це виправляє, тепер у реалізації ES5 навіть зарезервовані слова можна використовувати без лапок, як в Object literals, так і в доступі членів ( obj.function
Ok in ES5).
Тільки для протоколу, цей стандарт сьогодні впроваджується постачальниками програмного забезпечення, ви можете побачити, які браузери включають цю функцію в цій таблиці сумісності (див. Зарезервовані слова як назви властивостей )