Python JSONはDecimalオブジェクトをシリアル化します 質問する

Python JSONはDecimalオブジェクトをシリアル化します 質問する

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'

うまくいけば、この機能は標準ライブラリに含まれるでしょう。

おすすめ記事