example - ¿Las claves JSON tienen que estar entre comillas?
json examples (5)
Ejemplo: ¿Es el siguiente código válido 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 claves en sus ejemplos.
A partir del 2.2. Objetos
Una estructura de objeto se representa como un par de corchetes que rodean cero o más pares de nombre / valor (o miembros). Un nombre es una cadena.
y desde el 2.5. Instrumentos de cuerda
Una cadena comienza y termina con comillas.
Así que diría que de acuerdo con la norma: sí, siempre debe citar la clave (aunque algunos analizadores pueden ser más indulgentes)
Sí, las cotizaciones son obligatorias. http://json.org/ dice:
string
""
" chars "
Sí, necesitas comillas. Esto es para hacerlo más simple y para evitar tener que tener otro método de escape para las palabras clave reservadas de javascript, es decir, {for:"foo"}
.
Tienes razón al usar cadenas como la clave. Aquí hay un extracto de RFC 4627 - La aplicación / json Media Type para la notación de objetos de JavaScript (JSON)
2.2. Objetos
Una estructura de objeto se representa como un par de corchetes que rodean cero o más pares de nombre / valor (o miembros). Un nombre es una cadena . Una sola coma viene después de cada nombre, separando el nombre del valor. Una sola coma separa un valor de un nombre siguiente. Los nombres dentro de un objeto DEBEN ser únicos.
object = begin-object [ member *( value-separator member ) ] end-object
member = string name-separator value
[...]
2.5. Instrumentos de cuerda
La representación de cadenas es similar a las convenciones utilizadas en la familia C de lenguajes de programación. Una cadena comienza y termina con comillas. [...]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
Lea todo el RFC here .
Ya que puede poner la notación de puntos "parent.child" y no tiene que poner parent ["child"] que también es válido y útil, diría que ambas formas son técnicamente aceptables. Todos los analizadores deben 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, en esencia, no tiene sentido. En Json puedes poner ...
>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};
>obj
Object {someKey: "someValue"}
está bien, sin problemas, si necesita un valor para una clave y ninguna cita no funcionará, por lo que si no lo hace, no puede, por lo que no lo hará por lo que "no necesita citas en las claves". Incluso si es correcto decir que son técnicamente cuerdas. La lógica y el uso argumentan lo contrario. Tampoco muestra oficialmente el Objeto {"someKey": "someValue"} para obj en nuestro ejemplo ejecutado desde la consola de cualquier navegador.