JSON整数の大きさはどこでも指定されていますか?通常の(32ビット)intに制限されていると思いますが、それが書き留められている場所はどこにも見つかりません。Javaで長い識別子をエンコードする必要があるので、オーバーフローのリスクを回避するために、JSONの文字列としてそれらを格納する必要があると思います。
JSON整数の大きさはどこでも指定されていますか?通常の(32ビット)intに制限されていると思いますが、それが書き留められている場所はどこにも見つかりません。Javaで長い識別子をエンコードする必要があるので、オーバーフローのリスクを回避するために、JSONの文字列としてそれらを格納する必要があると思います。
回答:
JSON番号は仕様によって制限されません。
JSONはJavaScriptだけを対象とした抽象形式ではないため、実際のターゲット環境によって、解釈できるものの境界が決まります。
「JSON整数」はなく、「数値」データ型のサブセットであることも注目に値します。
[-(2**53)+1, (2**53)-1]
。)その範囲外で作業している場合は、文字列でエンコードされた整数を使用するか、実装の精度が低下することを期待してください。
RFC 7159:JavaScript Object Notation(JSON)データ交換形式
この仕様により、実装は受け入れられる数値の範囲と精度に制限を設定できます。IEEE 754-2008 binary64(倍精度)番号[IEEE754]を実装するソフトウェアは一般に入手可能であり、広く使用されているため、実装がJSONに近似するという意味で、これらが提供する以上の精度や範囲を期待しない実装によって、優れた相互運用性を実現できます。期待される精度の範囲内の数値。1E400や3.141592653589793238462643383279などのJSON番号は、相互運用性の潜在的な問題を示している可能性があります。これは、それを作成したソフトウェアが、受信ソフトウェアが広く利用可能な数値よりも優れた数値の大きさと精度を備えていることを期待しているためです。
json
モジュールなど)は、64ビット(組み込みのbignum)を超えても、任意の整数を解析します。
Chrome(Macではv.23)コンソールを使用して次の実証テストを行いました。
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]")
undefined
> j[0]
1e+228
JSONがHTTPを介して渡される場合、数値はいずれの場合もJavaから文字列に変換され、問題はJavascriptでのみ発生する可能性があります。
4.3.19数値
倍精度64ビットバイナリ形式のIEEE754値に対応するプリミティブ値
注数値は数値タイプのメンバーであり、数値を直接表しています。
これは、ウィキペディアの倍精度浮動小数点形式で定義されているものです。