フロートのリストをシリアル化するために、Python 2.6の標準のjsonモジュールを使用しています。しかし、私はこのような結果を得ています:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
浮動小数点数を2桁の10進数のみでフォーマットする必要があります。出力は次のようになります。
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
私は自分のJSON Encoderクラスを定義しようとしました:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
これは、単一のフロートオブジェクトに対して機能します。
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
しかし、ネストされたオブジェクトでは失敗します:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
私は外部依存関係を持ちたくないので、標準のjsonモジュールを使い続けることを好みます。
どうすればこれを達成できますか?