6. Numbers (数値)
数値の表現は、ほとんどのプログラミング言語で使用されているものと同様です。数値は10進数字を使用して10進法で表されます。これには、オプションのマイナス記号を前置できる整数部分と、それに続く小数部分および/または指数部分が含まれます。先行ゼロは許可されていません。
小数部分は、小数点の後に1つ以上の数字が続きます。
指数部分は、大文字または小文字の文字Eで始まり、その後にプラス記号またはマイナス記号が続く場合があります。Eとオプションの記号の後に1つ以上の数字が続きます。
以下の文法で表現できない数値(無限大 (Infinity) やNaNなど)は許可されません。
number = [ minus ] int [ frac ] [ exp ]
decimal-point = %x2E ; .
digit1-9 = %x31-39 ; 1-9
e = %x65 / %x45 ; e E
exp = e [ minus / plus ] 1*DIGIT
frac = decimal-point 1*DIGIT
int = zero / ( digit1-9 *DIGIT )
minus = %x2D ; -
plus = %x2B ; +
zero = %x30 ; 0
この仕様では、実装が受け入れる数値の範囲と精度に制限を設けることを許可しています。IEEE 754 binary64(倍精度、Double Precision)数値 [IEEE754] を実装するソフトウェアは一般的に利用可能で広く使用されているため、これらが提供する以上の精度や範囲を期待しない実装によって、良好な相互運用性を実現できます。実装は期待される精度内でJSON数値を近似するという意味です。1E400 や 3.141592653589793238462643383279 のようなJSON数値は、それを作成したソフトウェアが、受信側ソフトウェアが広く利用可能なものよりも大きな数値の大きさと精度の能力を持つことを期待していることを示唆するため、潜在的な相互運用性の問題を示している可能性があります。
このようなソフトウェアが使用される場合、整数であり範囲 [-(253)+1, (253)-1] 内にある数値は、実装がその数値に完全に同意するという意味で相互運用可能であることに注意してください。