web-dev-qa-db-ja.com

jsonでNaNを送信する

FloatとNaNを含む配列をPythonからjson.dumps()を使用してJSON文字列にエンコードしようとしています。

しかし、エンコードされたJSON文字列はPHPで正常にデコードされていません。 NaNがこの問題の原因ですか?この状況を回避するにはどうすればよいですか?

55
shreyas

json.dumps 持っています allow_nanパラメータ。デフォルトはTrueです。

NaN、Infinity、および-InfinityはJSONの一部ではありませんが、JavaScriptの標準であるため、一般的に使用される拡張機能です。受信者がそれらを処理できない場合は、allow_nan=False。ただし、NaNをシリアル化しようとすると、ValueErrorが発生します。

39
Thomas K

NaNは有効なJSONシンボルではありません。詳細は http://json.org/ を参照してください

あなたのエンコーダはおそらくNaNをnullとしてエンコードしているはずです。

16
Soren

Pythonの標準jsonパッケージのベースとなっているsimplejsonパッケージは、より速く移動し、この状況を処理します。 NaNは無効なJSONであり、ignore_nanフラグは、NaNからnullへのすべての変換を正しく処理します。

import simplejson as json
json.dumps(thing, ignore_nan=True)

defaultパラメーターを使用すると、simplejsonで日時を正しく解析できます。

json.dumps(response, ignore_nan=True, default=datetime.datetime.isoformat)

simplejsonはpipでインストールできます。

pip install simplejson
15
eiTan LaVi