¿Se especifica en alguna parte qué tan grandes pueden ser los enteros JSON? Supongo que están limitados a ints normales (32 bits), pero no puedo encontrar en ningún lugar que esté escrito. Necesito codificar identificadores que son largos en Java, así que supongo que necesito almacenarlos como cadenas en JSON para no correr el riesgo de desbordamiento.
81
[-(2**53)+1, (2**53)-1]
.) Si está trabajando fuera de ese rango, utilice enteros codificados en cadena o espere que las implementaciones pierdan precisión.RFC 7159: Formato de intercambio de datos de notación de objetos JavaScript (JSON)
fuente
json
módulo estándar de Python ) analizan enteros arbitrarios, incluso más allá de 64 bits (bignums integrados).Acabo de hacer la siguiente prueba empírica usando la consola de Chrome (v.23 en Mac):
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]") undefined > j[0] 1e+228
Si JSON se pasa a través de HTTP, el número se convertirá en String desde Java en cualquier caso y entonces el problema podría estar solo en Javascript.
De la Especificación del lenguaje ECMAScript 4.3.19 :
Que es lo que se define en wikipedia en formato de punto flotante de precisión doble .
fuente