Ejemplo: ¿Es válido el siguiente código contra la especificación JSON ?
{
precision: "zip"
}
¿O debería usar siempre la siguiente sintaxis? (Y si es así, ¿por qué?)
{
"precision": "zip"
}
Realmente no he encontrado algo sobre esto en las especificaciones JSON. Aunque usan citas alrededor de sus teclas en sus ejemplos.
json
specifications
standards-compliance
json5
christianvuerings
fuente
fuente
Estás en lo correcto al usar cadenas como la clave. Aquí hay un extracto de RFC 4627: la aplicación / json Media Type para JavaScript Object Notation (JSON)
Lea el RFC completo aquí .
fuente
A string begins and ends with quotation marks.
.De 2.2. Objetos
y de 2.5. Instrumentos de cuerda
Entonces, diría que según el estándar: sí, siempre debe citar la clave (aunque algunos analizadores pueden ser más indulgentes)
fuente
Sí, las cotizaciones son obligatorias. http://json.org/ dice:
fuente
Ellos si. Pero si necesita lo contrario, revise JSON5 .
JSON5 es un superconjunto de JSON que permite la sintaxis de ES5, que incluye:
La implementación de referencia JSON5 (
json5
paquete npm ) proporciona unJSON5
objeto que tieneparse
ystringify
métodos con los mismos argumentos y semánticas que elJSON
objeto incorporado .fuente
Como puede poner la notación punteada "parent.child" y no tiene que poner parent ["child"], que también es válido y útil, yo diría que ambas formas son técnicamente aceptables. Todos los analizadores deberían hacer ambas cosas bien. Si su analizador no necesita comillas en las claves, entonces probablemente sea mejor no ponerlas (ahorra espacio). Tiene sentido llamarlos cadenas porque eso es lo que son, y dado que los corchetes le dan la capacidad de usar valores para las teclas, esencialmente tiene mucho sentido no hacerlo. En Json puedes poner ...
bien sin problemas, si necesita un valor para una clave y ninguno entre comillas no funcionará, por lo que si no lo hace, no puede, por lo que no lo hará "no necesita comillas en las claves". Incluso si es correcto decir que técnicamente son cadenas. La lógica y el uso argumentan lo contrario. Tampoco muestra oficialmente Object {"someKey": "someValue"} para obj en nuestro ejemplo ejecutado desde la consola de cualquier navegador.
fuente
obj
en la consola, el navegador muestra una representación legible del objeto. Puede mostrarlo como un objeto literal (como lo hizo en su ejemplo), o puede usar alguna otra representación, incluso una representación interactiva. Los literales de objetos de JavaScript no requieren comillas alrededor del nombre de una clave si la clave es un identificador válido y no una palabra reservada. Sin embargo, JSON siempre requiere comillas alrededor de los nombres clave.obj
en la consola, intenteJSON.stringify(obj)
. Ahora verá una representación JSON válida del objeto, completa con el nombre clave entre comillas. Por el contrario, para ver si una cadena es JSON válida, intenteJSON.parse(string)
. Si no se citan las claves, esto generará una excepción. Por ejemplo,JSON.parse('{"a":"b"}')
tendrá éxito, peroJSON.parse('{a:"b"}')
fracasará.var obj = {[keyName]:"someValue"};
es muy interesante! No sabía que podías hacer eso en un objeto JavaScript literal. Un poco de comprobación muestra que esto es algo nuevo en ES6: no se puede hacerlo en ES5.