Entiers JSON: limite de taille

Est-il spécifié n'importe où la taille des entiers JSON peut être? Je suppose qu'ils sont limités aux ints normaux (32 bits), mais je ne trouve nulle part ce qui est écrit. J'ai besoin d'encoder des identifiants qui sont longs en Java, donc je suppose que j'ai besoin de les stocker sous forme de chaînes dans JSON afin de ne pas risquer de débordement.

50
demandé sur Ian Dickinson 2012-11-22 01:34:28

3 réponses

Un nombre 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 est également intéressant de noter qu'il n'y a pas d ' "entiers JSON", ils sont un sous-ensemble du type de données "Number".

61
répondu Tomalak 2017-05-08 14:59:42

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

Cette spécification permet aux implémentations de définir des limites sur la plage et la précision des numéros acceptés. Depuis le logiciel qui implémente IEEE 754-2008 binary64 (double précision) nombres [IEEE754] est généralement disponible et largement utilisé, une bonne interopérabilité peut être réalisé par des implémentations qui n'attendent plus de précision ou de portée que ceux-ci fournissent, dans le sens que les implémentations approximez les nombres JSON dans la précision attendue. UN JSON nombre tel que 1E400 ou 3.141592653589793238462643383279 peut indiquer problèmes potentiels d'interopérabilité, car il suggère que le le logiciel qui l'a créé s'attend à ce que le logiciel de réception ait une plus grande capacités de magnitude numérique et de précision que ce qui est largement disponible.

12
répondu Nolan 2016-09-24 22:55:39

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 passé par HTTP, le nombre sera converti en chaîne de Java dans tous les cas et le problème pourrait être uniquement en Javascript.

À Partir De Spécification Du Langage ECMAScript 4.3.19:

4.3.19 valeur numérique

Valeur Primitive correspondant à un binaire 64 bits à double précision format IEEE 754 valeur

Remarque une valeur numérique est un membre du type Number et est un membre direct représentation d'un nombre.

Qui est ce qui est défini dans wikipedia format à virgule flottante double précision .

6
répondu Tony Rad 2012-11-21 21:51:05