2012-02-16 12 views
7

¿Por qué JSON solo permite que string sea la clave de un par? ¿Por qué no otros tipos como null, number, bool, object, array? Teniendo en cuenta que JSON está estrechamente relacionado con JavaScript, ¿podría concluir el motivo de la especificación de JavaScript (ECMA-262)? Soy totalmente novato en JavaScript, ¿podría ayudarme a señalarlo?¿Por qué JSON permite que solo una cadena sea una clave?

+2

No diría que JSON es parte de JavaScript. Sus estructuras de datos se basan en la notación literal de objeto y matriz que se encuentra en JavaScript, pero su existencia es independiente de ECMA-262. –

Respuesta

1

Porque esa es la forma en que se escribió la especificación.

+2

Entonces, ¿por qué está escrito así. Todo viene con una razón. –

+1

@paladin_t - No necesariamente. A veces es solo la preferencia del escritor. –

+0

@Hot Licks, eso es razonable. –

6

El formato JSON se basa deliberadamente en un subconjunto de sintaxis literal de objeto JavaScript y sintaxis literal de matriz, y los objetos JavaScript solo pueden tener cadenas como claves, por lo que las claves JSON también son cadenas. (OK, puede ordenar los números como claves de objetos de JavaScript, pero realmente se convierten en cadenas.)

Tenga en cuenta que el objetivo de JSON es que es una cadena de representación de datos para permitir un fácil intercambio entre programas escritos en diferentes idiomas que se ejecutan en diferentes máquinas en diferentes entornos. Si quisieras usar un objeto como clave, entonces ese objeto tendría que representarse de alguna manera como una cadena para la transmisión, pero luego el lenguaje receptor necesitaría poder usar objetos como claves y eso significaría que necesitarías un subconjunto limitado de JSON para esos idiomas que sería un desastre.

"Teniendo en cuenta JSON es una parte de JavaScript"

No, no lo es. Los navegadores más nuevos proporcionan métodos para crear y analizar JSON, pero no son parte del lenguaje como tal, excepto que JSON es un formato de cadena y JavaScript puede hacer cadenas. JSON es siempre una representación de cadena: tiene que analizarse para crear un objeto para su uso dentro de JavaScript (u otros idiomas) y una vez que sucede JavaScript (u otros idiomas) tratar el objeto resultante igual que cualquier otro objeto.

(Tenga en cuenta también que un determinado ejemplar de JSON no necesariamente tiene ninguna tecla en absoluto:. Podría ser sólo una matriz, como '["one","two","three"]')

+0

Cadena es casi compatible directamente en diferentes idiomas, pero el objeto debe ser un personalizado. Tenemos que hacer algo para tratar con el objeto del valor, que podría ser de la misma manera para la clave. Si hiciéramos una clave limitada solo podría ser una cadena debido a la facilidad de intercambio de idioma cruzado, entonces eso significaba que el valor también era limitado. Prefiero considerarlo vicio en JavaScript. –

+1

JSON está diseñado para el intercambio de _data_. Si los datos de su aplicación son tan complicados que no puede encontrar una manera de representarlos usando solo nombres clave basados ​​en cadenas, le sugiero que está haciendo las cosas demasiado difíciles para usted. Si considera que debe tener objetos como claves, puede hacerlo en JSON incluyendo un objeto 'keys' (anidado) que correlaciona los nombres de propiedad basados ​​en cadenas con los objetos para que esos objetos se conviertan en una especie de" teclas virtuales ". La respuesta a su pregunta original, "¿por qué solo cadenas?" es porque eso es todo lo que se necesita para el propósito de JSON y eso es lo que el diseñador original decidió. – nnnnnn

1

La razón principal de acuerdo con el descubridor de JSON representación es decir, "al analizar json de datos, existe la posibilidad/posibilidad de que, key que está utilizando para referirse a un value podría ser un reserved word en su idioma análisis"

remitir este talk por Douglas Crockford, que es el descubridor de JSON r epresentación.

Ejemplo: { id: 1234, name: "foo", do: "somthing" }

Desde JSON es un lenguaje de compatibilidad cruzada podemos utilizar este conjunto de datos en muchos idiomas. Pero, la palabra do es una palabra clave en Javascript. Terminará en un error de sintaxis durante el análisis.

+0

aunque la mayoría de los lenguajes de programación no usarán números como claves, pero los números tampoco están permitidos. –

Cuestiones relacionadas