Entiers JSON: limite de taille

Est-il spécifié à quel point les entiers JSON peuvent être grands? Je suppose qu’ils sont limités à des valeurs normales (32 bits), mais je ne trouve nulle part où cela est écrit. J’ai besoin d’encoder des identificateurs longs en Java, je suppose donc que je dois les stocker en tant que chaînes dans JSON pour ne pas risquer de déborder.

Un numéro JSON n’est pas limité par la spécification .

Grammaire du nombre JSON

Étant donné que JSON est 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 “Entiers JSON”, ils constituent un sous-ensemble du type de données “Numéro”.

RFC 7159: le format d’échange de données JavaScript Object Notation (JSON)

Cette spécification permet aux implémentations de fixer des limites à la scope et à la précision des nombres acceptés. Comme les logiciels qui implémentent les nombres binarys64 (double précision) IEEE 754-2008 [IEEE754] sont généralement disponibles et largement utilisés, une bonne interopérabilité peut être obtenue par des implémentations qui n’attendent pas plus de précision. nombres dans la précision attendue. Un numéro JSON tel que 1E400 ou 3.141592653589793238462643383279 peut indiquer des problèmes d’interopérabilité potentiels, car cela suggère que le logiciel qui l’a créé s’attend à ce que le logiciel de réception dispose de capacités numériques et de précision supérieures à celles disponibles.

Je viens de faire le test empirique suivant en utilisant Chrome (v.23 sur Mac) Console:

 > var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]") undefined > j[0] 1e+228 

Si JSON est passé via HTTP, le nombre sera converti en Ssortingng à partir de Java et le problème ne pourra être que dans Javascript.

De la spécification de langage ECMAScript 4.3.19 :

4.3.19 Valeur du numéro

valeur primitive correspondant à une valeur IEEE 754 au format binary 64 bits à double précision

REMARQUE Une valeur Number est un membre du type Number et représente directement un nombre.

Ce qui est défini dans wikipedia Format à virgule flottante double précision .