Decimal('3.9')
オブジェクトの一部としてがあり、これを のような JSON 文字列にエンコードしたいと考えています{'x': 3.9}
。クライアント側の精度は気にしないので、float で問題ありません。
これをシリアル化する良い方法はありますか? JSONDecoder は Decimal オブジェクトを受け入れず、事前に float に変換すると{'x': 3.8999999999999999}
間違った結果が生成され、帯域幅が大幅に浪費されます。
ベストアンサー1
シンプルJSON 2.1以降では Decimal 型がネイティブでサポートされます。
>>> import simplejson as json
>>> json.dumps(Decimal('3.9'), use_decimal=True)
'3.9'
デフォルトでは次のようuse_decimal
になりますTrue
:
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding='utf-8', default=None, use_decimal=True,
namedtuple_as_object=True, tuple_as_array=True,
bigint_as_string=False, sort_keys=False, item_sort_key=None,
for_json=False, ignore_nan=False, **kw):
それで:
>>> json.dumps(Decimal('3.9'))
'3.9'
うまくいけば、この機能は標準ライブラリに含まれるでしょう。