La verdadera razón de por qué las claves JSON deben estar entre comillas, se basa en la semántica de los identificadores de ECMAScript 3.
Reserved words no se puede utilizar como nombres de propiedades en literales de objetos sin comillas, por ejemplo:
({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...
Mientras que si utiliza comillas los nombres de propiedades son válidas:
({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok
La propia Crockford lo explica en this talk, querían mantener el estándar JSON simple, y no les gustaría tener todas esas restricciones semánticas en él:
....
Eso fue cuando descubrimos el problema nombre sin comillas. Resulta que ECMA Script 3 tiene un whack reservado política de palabras. Las palabras reservadas deben ser cotizadas en la posición clave, que es realmente una molestia. Cuando llegué a para formular esto en un estándar, I no quería tener que poner todas las palabras reservadas en el estándar, porque se vería realmente estúpido.
En ese momento, yo estaba tratando de convencer a la gente : sí, se puede escribir aplicaciones en JavaScript, es realidad va a trabajar y es una buena idioma. No quería decir, entonces, al mismo tiempo: ¡y mira esto realmente estúpido que hicieron! Entonces, yo decidí, en cambio, citemos las claves .
De esta manera, no tenemos que decirle a nadie acerca de cómo es.
Es por eso que, hasta el día de hoy, las claves se citan en JSON.
...
La quinta edición estándar ECMAScript corrige esto, ahora en una implementación ES5, incluso palabras reservadas se pueden utilizar sin comillas, en tanto, literales de objetos y el acceso de miembros (obj.function
Ok en la ES5) .
Sólo para que conste, esta norma se está aplicando en estos días por proveedores de software, se puede ver lo que los navegadores incluyen esta característica en este compatibility table (ver palabras reservadas como nombres de propiedades)
"¿Por qué se molestan en hacerlo bien?" Este es el tipo de pensamiento perezoso que conduce a sitios web cargados de marcas no válidas. Haga que su código sea a prueba del futuro en caso de que algún navegador * * requiera comillas dobles. – meagar
"¿Por qué molestarse en hacerlo bien?"- ¿Por qué molestarse en seguir una convención que nadie más hace, si no hay un beneficio real? Quizás confundas el pensamiento perezoso con el pragmatismo. –
@Mark -" que nadie más lo hace "... ¿de dónde sacaste esa idea? el serializador JSON integrado en ** cada ** plataforma principal hace las cotizaciones adecuadas. –