次のように、リテラル NaN を含む JSON データ文字列を受け取る node.js アプリを用意します。
"[1, 2, 3, NaN, 5, 6]"
JSON.parse(...)
これは Node.js でクラッシュします。できれば、オブジェクトに解析したいと思います。
NaN
JSON仕様の一部ではないことは知っています。ほとんどのSOリンク(jsonでNaNを送信)は、出力を修正することを提案しています。
ここでは、データは私が制御していないサーバーで生成されますが、ソース コードを表示できる商用 Java ライブラリによって生成されます。また、Google の Gson ライブラリによって生成されます。
private Gson gson = (new GsonBuilder().serializeSpecialFloatingPointValues().create());
...
gson.toJson(data[i], Vector.class, jsonOut)
だから、それは正当な情報源のようです。そしてGson API Javadocによると、それを解析できるはずだと言っています:
JSON 仕様のセクション 2.4 では、特殊な double 値 (NaN、Infinity、-Infinity) は許可されていません。ただし、Javascript 仕様 (セクション 4.3.20、4.3.22、4.3.23 を参照) では、これらの値を有効な Javascript 値として許可しています。さらに、ほとんどの JavaScript エンジンは、これらの特別な値を JSON で問題なく受け入れます。そのため、実用的なレベルでは、JSON 仕様で許可されていなくても、これらの値を有効な JSON として受け入れることは理にかなっています。
それにもかかわらず、これは Node.js と Chrome の両方で失敗します。 JSON.parse('[1,2,3,NaN,"5"]')
JSON.parse() に設定するフラグはありますか? NaN
または、リテラルとして受け入れる代替パーサーですか?
私はしばらくの間グーグルをしてきましたが、この問題に関するドキュメントが見つからないようです。