Реальная причина того, почему ключи JSON должны быть в кавычках, основана на семантике Идентификаторов ECMAScript 3.
Зарезервированные слова нельзя использовать в качестве имен свойств в литералах объектов без кавычек, например:
({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...
Хотя при использовании кавычек имена свойств действительны:
({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok
Собственный Крокфорд объясняет это в этом выступлении , они хотели сохранить стандарт JSON простым и не хотели бы иметь все эти семантические ограничения:
....
Это было, когда мы обнаружили
проблема без кавычек. Оказывается
ECMA Script 3 имеет зарезервированный удар
политика слова. Зарезервированные слова должны быть
цитируется в ключевой позиции, которая
действительно неприятность. Когда я обошел
чтобы сформулировать это в стандарт, я
не хотел ставить все
зарезервированные слова в стандарте,
потому что это выглядело бы действительно глупо.
В то время я пытался убедить
люди: да, вы можете написать
приложения в JavaScript, это
на самом деле собирается работать, и это хорошо
язык. Я не хотел тогда говорить,
в то же время: и посмотрите на это
действительно глупая вещь, которую они сделали! Так что я
решил вместо этого просто процитировать
ключи.
Таким образом, нам не нужно говорить
Кто-нибудь о том, как это больно.
Вот почему по сей день ключи указаны в
JSON.
...
Стандарт ECMAScript 5-е издание исправляет это, теперь в реализации ES5 даже зарезервированные слова могут использоваться без кавычек как в литералах объектов, так и в доступе к элементам (obj.function
Хорошо в ES5).
Просто отметим, что в настоящее время этот стандарт внедряется поставщиками программного обеспечения. Вы можете увидеть, какие браузеры включают эту функцию в эту таблицу совместимости (см. Зарезервированные слова в качестве имен свойств )