JSON 키를 따옴표로 묶어야하는 실제 이유는 ECMAScript 3의 식별자 의미에 의존합니다.
예약어 는 따옴표없이 개체 리터럴에서 속성 이름 으로 사용할 수 없습니다 . 예를 들면 다음과 같습니다.
({function: 0})
({if: 0})
({true: 0})
따옴표를 사용하는 경우 속성 이름은 유효합니다.
({"function": 0})
({"if": 0})
({"true": 0})
자체 Crockford는 이 강연 에서 이를 설명하고 , JSON 표준을 단순하게 유지하기를 원했고 모든 의미 적 제한을 원하지 않을 것입니다.
....
그때 우리가 인용되지 않은 이름 문제를 발견했습니다. ECMA Script 3에는 예약어 정책이 있습니다. 예약어는 핵심 위치에 인용되어야하는데, 이는 정말 성가신 일입니다. 이것을 표준으로 공식화하려고했을 때 모든 예약어를 표준에 넣을 필요가 없었습니다. 왜냐하면 정말 멍청 해 보일 것이기 때문입니다.
그 당시 저는 사람들을 설득하려고 노력했습니다. 예, JavaScript로 애플리케이션을 작성할 수 있습니다. 실제로 작동 할 것이고 좋은 언어입니다. 나는 동시에 말하고 싶지 않았습니다. 그리고 그들이 한 정말 어리석은 일을보세요! 그래서 대신 열쇠를 인용 해 보겠습니다.
그렇게하면 아무에게도 그게 얼마나 엉망인지 말할 필요가 없습니다.
이것이 오늘날까지 키가 JSON으로 인용되는 이유입니다.
...
ECMAScript 5th Edition Standard는이 문제를 수정했으며 이제 ES5 구현에서 예약어조차도 객체 리터럴과 멤버 액세스 모두에서 따옴표없이 사용할 수 있습니다 ( obj.function
ES5에서는 Ok).
기록을 위해이 표준은 요즘 소프트웨어 공급 업체에 의해 구현되고 있습니다.이 호환성 테이블 에서이 기능을 포함하는 브라우저를 확인할 수 있습니다 ( 속성 이름으로 예약어 참조 ).