Czy gdziekolwiek określono, jak duże mogą być liczby całkowite JSON? Domyślam się, że są ograniczone do normalnych (32-bitowych) int, ale nie mogę znaleźć nigdzie, co zostało zapisane. Muszę zakodować identyfikatory, które są długie w Javie, więc zakładam, że muszę je przechowywać jako ciągi w JSON, aby nie ryzykować przepełnienia.
81
[-(2**53)+1, (2**53)-1]
.) Jeśli pracujesz poza tym zakresem, użyj liczb całkowitych zakodowanych jako łańcuch znaków lub spodziewaj się, że implementacje stracą precyzję.RFC 7159: format wymiany danych JavaScript Object Notation (JSON)
źródło
json
moduł Pythona ) analizują dowolne liczby całkowite, nawet powyżej 64 bitów (wbudowane bignum).Właśnie wykonałem następujący test empiryczny przy użyciu konsoli Chrome (wersja 23 na Macu):
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]") undefined > j[0] 1e+228
Jeśli JSON jest przesyłany przez HTTP, w każdym przypadku liczba zostanie przekonwertowana na ciąg znaków z języka Java, a problem może dotyczyć tylko JavaScript.
Ze specyfikacji języka ECMAScript 4.3.19 :
To właśnie zdefiniowano w Wikipedii w formacie zmiennoprzecinkowym podwójnej precyzji .
źródło