¿En JSON, Porque los Nombres están entre Comillas?




De acuerdo con json.org, un objeto JSON está compuesto de miembros, que se componen de pares.

Cada par está hecho de una cadena y un valor, con una cadena que se define como:


Una cadena es una secuencia de cero o más caracteres Unicode, envueltos entre comillas dobles, utilizando escapes de barra invertida. Un carácter se representa como una sola cadena de caracteres. Una cadena es muy similar a una cadena C o Java.”


Pero en la práctica la mayoría de los programadores no saben que un carácter JSON debe estar rodeada de comillas dobles, porque la mayoría de los navegadores no requieren el uso de comillas dobles.

Ejemplo válido:
{
  "keyName" : 34
}


Ejemplo inválido:
{
  keyName : 34
}


(Te puede interesar: El Content Type de Json correcto)


ECMAScript 3
La razón de por qué las claves JSON deben estar entre comillas, se basa en la semántica de Identificadores de ECMAScript 3.


Las palabras reservadas no se pueden usar como nombres de propiedad en Literales de objeto sin comillas, por ejemplo:
({function: 0}) // ErrorSintáctico
({if: 0}) // ErrorSintáctico
({true: 0}) // ErrorSintáctico
// etc...

Mientras que, si utiliza comillas, los nombres de propiedad son válidos:
({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok

El propio Crockford lo explica en esta charla, querían mantener el estándar JSON simple, y no les gustaría tener todas esas restricciones semánticas en él:
Fue entonces cuando descubrimos el problema del nombre no mencionado. Resulta que ECMA Script 3 tiene una política de palabra reservada. Las palabras reservadas deben ser citadas en la posición clave, que es realmente una molestia. Cuando llegué a formular esto en un estándar, no quería tener que poner todas las palabras reservadas en el estándar, porque se vería realmente estúpido.

En ese momento, estaba tratando de convencer a la gente: “sí, usted puede escribir aplicaciones en JavaScript, en realidad va a funcionar y es un buen lenguaje”. En ese entonces no quería decir, al mismo tiempo: ¡y mira esto realmente estúpido que hicieron! Así que decidí, en su lugar, vamos a citar las claves...

Es por eso que, hasta el día de hoy, las claves se citan en JSON.

El ECMAScript 5ª Edición Standard corrige esto, ahora en una implementación ES5, incluso las palabras reservadas se pueden usar sin comillas, tanto en Literales de objetos como en acceso a miembros (obj.function Ok en ES5).



CONCLUSIÓN
La filosofía de diseño de JSON es "Keep it simple" (Mantenlo simple)

Citar nombres con " " es mucho más simple que: Puede citar nombres con " o pero no es necesario, a menos que contengan ciertos caracteres (o combinaciones de caracteres que lo convertirían en una palabra clave) y " o necesitan ser citados dependiendo de qué delimitador haya seleccionado.

Ahora, existe una diferencia semántica entre escribir: 
{"Property1":"Value1","Property2":18}

o así:
{Property1:"Value1",Property2:18}

En JSON si, pero no en JavaScript. En JavaScript son idénticos.

¿Y tú ya conocías esta información? Dejalo en los comentarios.

No hay comentarios:

Publicar un comentario