paquetes - ¿Se pueden citar los números JSON?
r for linux download (3)
¿Puede haber citas con números JSON? En la mayoría de los enlaces de búsqueda, parece que los números no "requieren" comillas. Pero, ¿deberían los analizadores aceptar tanto "attr" : 6
como "attr" : "6"
?
Si MyParser
tiene un método getInt
para obtener un número dado la clave, ¿debería MyParser.getInt("attr")
devolver 6
en ambos casos, o lanzar una excepción en este último caso?
En JSON , 6
es el número seis. "6"
es una cadena que contiene el dígito 6
. Entonces, la respuesta a la pregunta "¿Pueden citarse los números json?" es básicamente "no", porque si los pones entre comillas, ya no son números.
Pero, ¿deberían los analizadores aceptar tanto "attr": 6 y attr: "6"?
El segundo ejemplo no es válido, porque attr
debe estar entre comillas, por ejemplo:
{"attr": "6"}
... es válido y define un objeto con una propiedad llamada attr
con el valor de cadena "6"
, mientras que:
{"attr": 6}
... es válido, y define un objeto con una propiedad llamada attr
con el valor numérico 6
, y finalmente:
{attr: 6}
...y
{attr: "6"}
... ambos son JSON inválidos porque los nombres de propiedad deben estar entre comillas dobles.
Si MyParser tiene un método getInt para obtener un número dado la clave, ¿debería MyParser.getInt ("attr") devolver 6 en ambos casos o lanzar una excepción en este último caso?
Esa es una decisión de diseño para la persona que proporciona el analizador, básicamente la opción entre getInt
ser estricto (lanzando una excepción si lo intentas en "attr": "6"
) o suelto (coaccionando "6"
a 6
y devolviéndolo). JavaScript suele ser suelto, por lo que podría haber un argumento para ser flexible; por el contrario, el hecho de que JavaScript sea flexible a veces causa problemas, lo que podría ser un argumento para ser estricto.
Eso dependerá del lenguaje que use para obtener el número entero, porque si el lenguaje de programación no proporciona una conversión implícita de cadena a int, puede tener problemas.
No debe preocuparse demasiado, ya que el lenguaje de programación moderno en la actualidad puede convertir implícitamente una cadena a un número sin código adicional. Algo que debes tener en cuenta es que, al usar los lenguajes de programación como JavaScript, cuando usas ==
y ===
cuando comparas valores, ===
toma en consideración el tipo de valor mientras ==
no, entonces 6 === "6"
devolverá false
, mientras que 6 == "6"
devolverá true
.
Respondiendo a su pregunta, no emitirá una excepción si está utilizando un lenguaje de programación que proporciona conversión implícita de cadena a int.
Puedes citar el número. Ambos son válidos ("attr": 6 y "attr": "6") Lo único que hay que tener en cuenta es que, al extraer el valor, debes utilizar GetInt () en el primer caso y GetString () en el segundo caso y luego convierte esa cadena en entero.