programing

JSON 정수: 크기 제한

procenter 2023. 2. 11. 17:09
반응형

JSON 정수: 크기 제한

JSON 정수의 크기를 명시하고 있습니까?통상의(32비트) ints로 한정되어 있다고 생각합니다만, 어디에도 기재되어 있지 않습니다.Java에서 long인 식별자를 인코딩해야 하므로 오버플로우 위험을 피하기 위해 문자열로 JSON에 저장해야 할 것 같습니다.

JSON 번호는 사양에 따라 제한되지 않습니다.

JSON 번호 문법

JSON은 JavaScript만을 대상으로 하지 않는 추상 형식이기 때문에 실제 대상 환경은 해석할 수 있는 것의 경계를 결정합니다.

또한 "JSON 정수"는 존재하지 않으며 "숫자" 데이터 유형의 하위 집합입니다.

RFC 7159:JavaScript Object Notation(JSON; JavaScript 객체 표기법) 데이터 교환 형식

이 사양에 의해, 실장에서는, 수용되는 숫자의 범위와 정밀도에 제한을 설정할 수 있습니다.IEEE 754-2008 binary64(이중 정밀도) 번호[IEEE754]를 실장하는 소프트웨어는 일반적으로 이용 가능하며 널리 사용되고 있기 때문에, 이러한 수치보다 높은 정밀도나 범위를 기대할 수 없는 실장에서는, JSON 번호의 개산을 상정하고 있는 정밀도내에서 실시할 수 있기 때문에, 양호한 상호 운용성을 실현할 수 있습니다.1E400 또는 3.141592657979323846338327979 등의 JSON 번호는 수신 소프트웨어를 작성한 소프트웨어가 널리 이용 가능한 것보다 더 큰 수치와 정밀도의 기능을 가지고 있음을 나타내기 때문에 잠재적인 상호운용성 문제를 나타낼 수 있습니다.

방금 Chrome(Mac에서는 v.23) 콘솔을 사용하여 다음과 같은 실증 테스트를 수행했습니다.

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

> j[0]
1e+228

JSON이 HTTP를 통해 전달되면 어떤 경우에도 Java에서 String으로 변환되어 Javascript에서만 문제가 발생할 수 있습니다.

ECMAScript Language Specification 4.3.19부터:

4.3.19 번호값

2배 정밀도의 64비트 바이너리 포맷 IEEE 754 값에 대응하는 원시값

참고 숫자 값은 숫자 유형의 멤버이며 숫자를 직접 나타냅니다.

Wikipedia Double-Precision 부동소수점 형식에서 정의된 것입니다.

언급URL : https://stackoverflow.com/questions/13502398/json-integers-limit-on-size

반응형