Подтвердить что ты не робот

Целые числа JSON: ограничение по размеру

Определяется ли он где угодно, как большие JSON-целые числа? Я предполагаю, что они ограничены обычными (32-битными) ints, но я не могу найти нигде, что записано. Мне нужно кодировать идентификаторы, которые являются longs в Java, поэтому я полагаю, что мне нужно сохранить их как строки в JSON, чтобы не переполнять риск.

4b9b3361

Ответ 1

Число JSON не ограничено спецификацией.

JSON number grammar

Поскольку JSON - это абстрактный формат, который не предназначен исключительно для JavaScript, фактическая целевая среда определяет границы того, что можно интерпретировать.

Также стоит отметить, что нет "JSON-целых чисел", они являются подмножеством типа данных "Число".

Ответ 2

RFC 7159: Формат обмена данными JavaScript (JSON)

Эта спецификация позволяет реализациям устанавливать ограничения на диапазон    и точность принятых чисел. Поскольку программное обеспечение, которое реализует    Номера IEEE 754-2008 binary64 (двойная точность) [IEEE754]    общедоступных и широко используемых, хорошая совместимость может быть    достигнутых благодаря реализациям, которые не ожидают больше точности или дальности    чем они обеспечивают, в том смысле, что реализации    приближенные числа JSON в ожидаемой точности. JSON    число, такое как 1E400 или 3.141592653589793238462643383279, может указывать    потенциальных проблем функциональной совместимости, поскольку    программное обеспечение, которое создало его, ожидает, что получение программного обеспечения будет иметь больше    возможности для числовой величины и точности, чем широко    доступны.

Ответ 3

Я только что сделал следующий эмпирический тест с помощью консоли Chrome (v.23 на Mac):

> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]")
undefined

> j[0]
1e+228

Если JSON передается через HTTP, тогда число будет преобразовано в String из Java в любом случае, и тогда проблема может быть только в Javascript.

От Спецификация языка ECMAScript 4.3.19:

4.3.19 Числовое значение

примитивное значение, соответствующее 64-битовому двоичному двоичному представлению с двойной точностью формат IEEE 754

ПРИМЕЧАНИЕ. Числовое значение является членом типа Number и является прямым представление числа.

Это то, что определено в wikipedia Формат с плавающей запятой с двойной точностью.