メインコンテンツまでスキップ

6. Numbers (数値)

数値の表現は, ほとんどのプログラミング言語で使用される表現に似ています。数値は10進数で表され, 10進数字を使用します。整数部を含み, オプションでマイナス記号の接頭辞を付けることができ, その後にオプションの小数部および/または指数部が続きます。先頭のゼロは許可されていません。

小数部 (Fraction Part) は, 小数点に続く1つ以上の数字です。

指数部 (Exponent Part) は, 大文字または小文字の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-2008 binary64 (倍精度) 数値 [IEEE754] を実装するソフトウェアは一般に利用可能で広く使用されているため, これらが提供する精度または範囲を超えない実装は良好な相互運用性を達成できることが期待されます。実装は期待される精度内でJSON数値を近似するためです。1E400や3.141592653589793238462643383279のようなJSON数値は, 潜在的な相互運用性の問題を示す可能性があります。これは, それを作成したソフトウェアが受信ソフトウェアに一般的に利用可能なものより大きな数値範囲と精度能力があることを期待していることを示唆しているためです。

このようなソフトウェアを使用する場合, [-(253)+1, (253)-1] の範囲内の整数は相互運用可能であることに注意してください。実装はそれらの数値を完全に一貫して決定するためです。