2011-07-06 29 views
36

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

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

+0

出力されるJSONの外観は何ですか? NaNはPythonのネイティブデータ型ではありませんので、私はそれがまったく動作するのに驚いています。 –

+4

@Daniel:実際には、 'float(" nan ")'を実行すれば、それを得ることができます。 'json.dumps(float(" nan "))'を呼び出すと、 "NaN"が返されます。 –

答えて

29

json.dumpsのパラメータはallow_nanです。デフォルトはTrueです。

NaN、Infinityおよび-InfinityはJSONの一部ではありませんが、Javascriptの標準であるため、よく使用される拡張機能です。受信者が処理できない場合は、allow_nan=Falseと設定します。しかし、NaNをシリアライズしようとするとValueErrorが返されます。

11

NaNはhttp://json.org/

で仕様を参照してくださいあなたのエンコーダは、おそらく代わりにnullとしてはNaNをコード化している必要があり、有効なJSON記号ではありません。

+0

jsonでエンコードされた文字列にはNONのみが含まれています – shreyas

+0

これを修正する必要があります。マニュアルhttp://docs.python.org/library/json.html#basic-usage – Soren

8

てみ使用してのsimplejson:コード内で次に

pip install simplejson 

import simplejson 

response = df.to_dict('records') 
simplejson.dumps(response, ignore_nan=True,default=datetime.datetime.isoformat) 

ignore_nanフラグが正しく、すべてのNaNを処理する - >ヌル変換

デフォルトフラグができるようになりますのsimplejsonあなたのdatetimesを正しく解析する。