2011-07-15 12 views
2

浮動小数点数0000000000000000E + 00(本質的にゼロ)を含むJSONに問題があります。例えば、検討:JSONの浮動小数点ゼロ(0000000000000000E + 00)がjQuery(Windows)/ JSONLintで解析されない

{ 
    "a": 3199999999999999E+01, 
    "b": 0000000000000000E+00, 
    "c": 0, 
    "d": 5 
} 

ゼロ浮動小数点数は、以下の状況でのエラーを与える:

  • JSONLintを通してそれを実行する(http://jsonlint.com/)
  • それを評価jQuery.parseJSON(IEとFirefox、Zを変更するjQueryの

の様々な バージョンのWindows上の ブラウザでエロ浮動小数点数をゼロ以外の値に設定すると、手間がかかりません。

次のJSFiddle:http://jsfiddle.net/Gr6fq/もご覧ください。 Linuxでこれを実行すると、動作します。 Windowsでは、エラーが発生します。

答えて

6

Javascriptパーサは、左端の先行ゼロをオクタル修飾子として解釈し、現在のトークンを8進数として解析するように見えます。その後、それが遭遇したEトークンで窒息する。

のFirefox 5.0のコンソールを使用する:

0E+00 // Okay, parsed as 0. 
00E+00 // Syntax error, identifier starts immediately after numeric literal. 
+0

それは構文エラーで、異なるブラウザは、私はそれはちょうど彼らがどのエラーにように、コードをtokenisingして解析する方法によって異なり推測するように、さまざまなエラーを報告しているように見えます彼らは投げる。 – RobG

+0

フレデリックに感謝します。さて、これは私のJSON解析の質問とどう関係しているのですか?jQueryのparseJSONメソッドでこれらのどちらかを評価しようとすると、Linuxでは問題なく評価されますが、Windowsではエラーになります。 JSONLintは、ここで説明するのと同じ方法でそれらを扱います。 (私はより具体的で、これを回避する方法を尋ねるべきだと思う。私はSAPシステムから値を取得しているので、私はそれらの制御を制限している)。 – mydoghasworms

+0

@mydoghasworms、サーバー側のコードでJSON式をどのように生成していますか?文字列をSAPから直接取得するのではありませんか? :) –

関連する問題