¿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?
Respuesta
Porque esa es la forma en que se escribió la especificación.
Entonces, ¿por qué está escrito así. Todo viene con una razón. –
@paladin_t - No necesariamente. A veces es solo la preferencia del escritor. –
@Hot Licks, eso es razonable. –
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"]'
)
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. –
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
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.
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. –
- 1. Una restricción que solo permite que una de dos tablas haga referencia a una tabla base
- 2. ¿Por qué deberías evitar que una clase sea subclasificada?
- 3. ¿Por qué desechar StreamReader hace que una secuencia sea ilegible?
- 4. SortedList indexado por otra cosa que no sea la clave
- 5. Expresión regular que permite espacios en una cadena, pero no solo espacios en blanco
- 6. ¿Por qué una propiedad de solo lectura todavía permite escribir con KVC
- 7. Una función que solo permite N hilos concurrentes
- 8. ¿Cómo hacer que una clave compuesta sea única?
- 9. ¿Qué hace que una aplicación web sea una aplicación amigable?
- 10. Por qué solo una clase por archivo
- 11. Codifica una cadena de Ruby en una cadena JSON
- 12. ¿Por qué PowerShell me dice que una cadena no es una cadena? Y solo cuando llamo String.Length, primero
- 13. Alterar la clave primaria en Rieles para que sea una cadena
- 14. ¿Por qué el yo solo es una convención y no una verdadera palabra clave de Python?
- 15. jQuery: Seleccione solo una clase que contenga una cadena?
- 16. ¿Por qué se permite la cadena de caracteres y el compilador no permite int int?
- 17. Cómo crear un constructor que solo sea utilizable por una clase específica. (C++ Amigo equivalente en C#)
- 18. ¿Qué hace que una entrada sea vulnerable a XSS?
- 19. Serializar un mapa que no tiene una cadena como clave con lift-json
- 20. ¿Por qué C++ permite asignar un número entero a una cadena?
- 21. ¿Cuál es la ventaja de que una cadena sea inmutable?
- 22. ¿Por qué solo se agrega una vez?
- 23. ¿Por qué no puedo hacer que String sea una instancia de una clase de tipo?
- 24. ¿Por qué TFS no permite que se conecten múltiples colecciones con un solo controlador de compilación?
- 25. ¿Por qué la parte "clave" en un hash/dict JS debe ser una cadena?
- 26. CheckedListBox que permite marcar solo un elemento
- 27. Almacenamiento de una matriz de valores clave en una cadena JSON compacta
- 28. ¿Cómo modifico una cadena json grande?
- 29. ¿Por qué un inicializador que contiene una cadena literal es válido para inicializar una matriz `char`?
- 30. ¿Debería hacer que una columna de tabla autorreferencial sea una clave externa?
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. –