Pregunta

De acuerdo con Crockford json.org , un JSON objetos se compone de miembros , que se compone de pares .

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

  

Una cadena es una secuencia de cero o más   caracteres Unicode, envueltos en doble   citas, utilizando escapa barra invertida. UNA   carácter se representa como una sola   cadena de caracteres. Una cadena es muy   al igual que una cadena C o Java.

Pero en la práctica la mayoría de los programadores ni siquiera saben que una clave JSON debe estar rodeado por comillas dobles, porque la mayoría de los navegadores no requieren el uso de comillas dobles.

¿tiene algún sentido a molestar que rodea a su JSON entre comillas dobles?

ejemplo válido:

{
  "keyName" : 34
}

A diferencia de la nulidad de:

{
   keyName : 34
}
¿Fue útil?

Solución

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

palabras reservadas no pueden utilizarse 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 esta charla , que quería mantener la sencilla norma JSON, y que no le gustaría tener todas esas restricciones semánticas en él:

  

....

     

Fue entonces cuando descubrimos la   Nombre problema no indicada. Resulta   ECMA Script 3 ha reservado un golpe   palabra política. Las palabras reservadas deben estar   citado en la posición clave, que es   realmente una molestia. Cuando llegué alrededor   formulizing a esto en un estándar, lo   no quiero tener que poner toda la   palabras reservadas en la norma,   porque se vería muy estúpida.

     

En ese momento, yo estaba tratando de convencer   personas: sí, se puede escribir   aplicaciones en JavaScript, que es   en realidad va a trabajar y es un buen   idioma. No quería decir, entonces,   al mismo tiempo, y en este aspecto   realmente estúpida cosa que hicieron! Asique   decidió, en cambio, vamos a citar la   llaves.
  De esa manera, no tenemos que contar   nadie sobre cómo golpear a que es.

     

Es por eso que, a día de hoy, las claves son citados en   JSON.

     

...

La edición estándar ECMAScript quinto 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 tabla de compatibilidad (ver Las palabras reservadas como nombres de propiedades )

Otros consejos

Sí, es inválida JSON y se rechazará en caso contrario, en muchos casos, por ejemplo jQuery 1.4+ tiene un cheque que hace JSON no indicada en silencio falle. ¿Por no sea compatible?

Vamos a poner otro ejemplo:

{ myKey: "value" }
{ my-Key: "value" }
{ my-Key[]: "value" }

... todos ellos podría será válida con comillas, por qué no ser consistente y usarlos en todos los casos, lo que elimina la posibilidad de un problema?

Un ejemplo más común en el mundo desarrollador web: Hay miles de ejemplos de HTML no válida que hace que en la mayoría de los navegadores ... ¿Eso hace que sea menos dolorosa para depurar o mantener? No, en absoluto, todo lo contrario.

Además @ Mateo hace que el mejor punto de todos en los comentarios de abajo, este ya falla, las teclas no cotizados lanzarán un error de sintaxis con JSON.parse() en todos los principales navegadores (y cualquier otro que implementan correctamente), puede probar aquí .

YAML, que en realidad es un superconjunto de JSON, apoya lo que quiere hacer. Aunque es un superconjunto, que le permite mantenerse lo más simple que desea.

YAML es un soplo de aire fresco y puede ser digno de su tiempo para echar un vistazo a él. El mejor lugar para comenzar es aquí: http://en.wikipedia.org/wiki/YAML

Hay librerías para todos los idiomas bajo el sol, incluyendo JS, por ejemplo, https://github.com/ nodeca / js-yaml

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top