PythonでDecimal型のデータを扱うとき、そのデータをJSONにシリアライズするときに問題が発生することがあります。その問題は、「TypeError: Object of type ‘Decimal’ is not JSON serializable」というエラーメッセージで表されます。

この問題は、PythonのjsonモジュールがDecimal型をネイティブにサポートしていないために発生します。しかし、この問題を解決する方法はいくつかあります。

Decimalをfloatに変換する

Decimalオブジェクトのint/float値をシリアライズすることができます。

# dはあなたのdecimalオブジェクトと仮定します
serializable_d = int(d)  # または float(d)
d_json = json.dumps(serializable_d)

ただし、Decimalオブジェクトは精度を保つために存在するため、floatにキャストすると不確実性が追加される可能性があります。

JSONEncoderを拡張する

jsonモジュールのJSONEncoderクラスを拡張して、Decimal型を文字列に変換してその精度を保つことができます。

from decimal import Decimal
import json

class DecimalEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Decimal):
            return str(obj)
        return json.JSONEncoder.default(self, obj)

# これを呼び出すには、json.dumps(some_object, cls=DecimalEncoder)を使用します

この方法では、外部パッケージに依存せずに良好な精度が維持されます。

以上の方法を試してみて、PythonでDecimal型をJSONにシリアライズする際の問題を解決できることを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です