数値が適切に解析されていない単純なJSONがあります。
[
{
"orderNumber": 1,
"customerId": 228930314431312345,
"shoppingCartId": 22893031443137109,
"firstName": "jjj"
}
]
@ http://www.utilities-online.info/xmltojson/ で試してみたところ、結果は
<?xml version="1.0" encoding="UTF-8" ?>
<orderNumber>1</orderNumber>
<customerId>228930314431312350</customerId>
<shoppingCartId>22893031443137108</shoppingCartId>
<firstName>jjj</firstName>
ご覧のとおり、XMLはJSONとは異なります。 JSONは初めてです。私は何かが足りないのですか?
これはJavascriptの精度の問題です。
Mozilla Developer Networkによると:
ECMA-262は、最大21桁の有効数字の精度のみを必要とします。他の実装では、標準で要求されるよりも高い精度がサポートされていない場合があります。
ソース: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision
配列をGoogleChromeのJavascriptコンソールに貼り付けて、次のように戻しました。
したがって、Javascriptは、XMLに変換される前に値を丸めているように見えます。変換はブラウザのJavascriptを介して http://www.utilities-online.info/xmltojson/ で行われているため、番号が変更された理由は理にかなっています。
(注:GoogleでテストしましたChromeバージョン26.0.1410.43m、Windows 7 Professionalを使用)
編集:
これらの値を文字列としてJavascriptに渡せない理由はありますか?
これを試して:
[
{
"orderNumber": "1",
"customerId": "228930314431312345",
"shoppingCartId": "22893031443137109",
"firstName": "jjj"
}
]
これを実行して、値を正常に保存することができました。ただし、もちろん0を掛けるようなことをしない限り、Javascriptでそれらに対して数学計算を実行することはできません。
これも、参照を使用して正しくXMLに変換されます http://www.utilities-online.info/xmltojson/ 。
Javascriptは、その数値を倍精度浮動小数点数として表します。これにより、表現できる最大の整数が+ -9007199254740992に制限されます。これが [〜#〜] ecma [〜#〜] ドキュメントです。