La taille des entiers JSON est-elle spécifiée quelque part ? Je suppose qu'ils sont limités aux ints normaux (32 bits), mais je ne trouve nulle part où cela est écrit. J'ai besoin d'encoder des identifiants longs en Java, et je suppose donc que je dois les stocker sous forme de chaînes dans JSON pour ne pas risquer un débordement.
Réponses
Trop de publicités?Un numéro JSON n'est pas limité par la spécification .
JSON étant un format abstrait qui n'est pas exclusivement destiné à JavaScript, l'environnement cible réel détermine les limites de ce qui peut être interprété.
Il convient également de noter qu'il n'existe pas de "JSON Integers", mais un sous-ensemble du type de données "Number".
RFC 7159 : Le format d'échange de données JavaScript Object Notation (JSON)
Cette spécification permet aux implémentations de fixer des limites sur la gamme et la précision des nombres acceptés. Puisque les logiciels qui mettent en œuvre IEEE 754-2008 binaire64 (double précision) [IEEE754] est généralement disponible et largement utilisé. généralement disponibles et largement utilisés, une bonne interopérabilité peut être bonne interopérabilité peut être obtenue par des implémentations qui n'attendent pas plus de précision ou d'étendue que ce qu'ils fournissent, dans le sens où les implémentations vont approximation des nombres JSON dans les limites de la précision attendue. UN NOMBRE JSON tel que 1E400 ou 3.141592653589793238462643383279 peut indiquer une interopérabilité potentielle. des problèmes d'interopérabilité potentiels, car il suggère que le logiciel qui l'a créé s'attend à ce que le logiciel récepteur ait de plus grandes des capacités de magnitude et de précision numériques supérieures à celles qui sont disponibles.
Je viens de faire le test empirique suivant en utilisant la console Chrome (v.23 sur Mac) :
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]")
undefined
> j[0]
1e+228
Si JSON est transmis par HTTP, le nombre sera converti en String à partir de Java dans tous les cas et le problème pourrait alors se poser uniquement en Javascript.
En Spécification de langage ECMAScript 4.3.19 :
4.3.19 Valeur numérique
valeur primitive correspondant à une valeur binaire de 64 bits en double précision. format IEEE 754
REMARQUE Une valeur de type Nombre est un membre du type Nombre et est un élément direct de l'ensemble des valeurs. représentation directe d'un nombre.
C'est ce qui est défini dans wikipedia Format flottant à double précision .