Python json エンコーダーが Python の新しいデータクラスをサポートするようにする 質問する

Python json エンコーダーが Python の新しいデータクラスをサポートするようにする 質問する

Python 3.7 以降では、データクラスと呼ばれるものがあります。

from dataclasses import dataclass

@dataclass
class Foo:
    x: str

ただし、次の場合は失敗します。

>>> import json
>>> foo = Foo(x="bar")
>>> json.dumps(foo)
TypeError: Object of type Foo is not JSON serializable

json.dumps()のインスタンスをFooJSONにエンコードするにはどうすればいいですか?オブジェクト?

ベストアンサー1

JSONエンコーダーにサポートを追加できるのと同じようにdatetimeオブジェクトまたは Decimals の場合、データクラスをシリアル化するためのカスタム エンコーダー サブクラスを提供することもできます。

import dataclasses, json

class EnhancedJSONEncoder(json.JSONEncoder):
        def default(self, o):
            if dataclasses.is_dataclass(o):
                return dataclasses.asdict(o)
            return super().default(o)

json.dumps(foo, cls=EnhancedJSONEncoder)

おすすめ記事