2012-05-17 15 views
7

問題は本当にシンプルですが、JSON.parseを使用する「ネイティブ」ソリューションがあるかどうかはわかりません。JSON.parseは大きな数値を正しく解析/変換しません

{ "key" : -922271061845347500 } 

{ "key" : -922271061845347495 } 

私はこの文字列にJSON.parseを使用しています、それはこのオブジェクトに変身:

私はAPIからこの文字列を受け取ります

ご覧のとおり、番号が長すぎると解析が停止します(この現象を確認できます)here)。正確な数字は15桁で、最後の数字は四捨五入され、後の数字は0に設定されています。正確な値を保持するための「ネイティブ」ソリューションはありますか?

私はこの問題を解決するために正規表現を使用することができますが、存在する場合は "ネイティブ"メソッドを使用することをお勧めします。

+1

文字列にすることはできますか? –

+0

、 '{ "キー": "-922271061845347495"}としてみてください' – Jashwant

+1

これはいくつかの答えを提供する: [スタックオーバーフロースレッド] [1] [1]:http://stackoverflow.com/質問/ 209869 /受け入れ方針64ビット値を超えてjson –

答えて

15

の解析が特定の数字の後に停止すると仮定すると、は間違っています。

それはhere言う:

JavaScriptでは、すべての数字がされている浮動小数点数。 - 非常に大きく、そして±5×10 -324 - 非常に小さい

±1.7976931348623157×10 :JavaScriptが 範囲を意味標準の8バイトIEEE浮動小数点数値形式は、である を使用します。

JavaScriptは浮動小数点数を使用するように精度の整数ため のみ保証される:-9007199254740992(-2 )および9007199254740992 (2 )

あなた番号の外側にあります「正確な」範囲であるため、JavaScript番号の最も近い表現に変換されます。この数値を評価しようとすると(JSON.parse、eval、parseIntを使用)、データが失われます。したがって、キーを文字列として渡すことをお勧めします。 APIを制御しない場合は、機能要求を提出してください。

+0

これは実際に質問に答えません。 「正確な価値を維持するためのネイティブソリューションはありますか?」 –

+0

ネイティブソリューションは、数値を文字列として解析する独自のJSONパーサーを作成することです。 –

+0

@サルマンA:あなたの説明とアドバイスをありがとう。私はおそらく私自身のパーサを作成して文字列としてキーを送信し、次にそれらをapi側の数字に分解するまで少し待つでしょう。 – Simon

関連する問題