\

PythonのDataclassとJSONを相互に変換する方法について説明します。Pythonの標準ライブラリであるdataclassesjsonを使用します。

DataclassからJSONへの変換

まず、DataclassからJSONへの変換方法について見てみましょう。Pythonのdataclasses.asdict()関数とjson.dump()関数のdefault引数を使用することで、Dataclassを簡単にJSONに変換できます。

以下に一例を示します。

import json
from dataclasses import dataclass, asdict

@dataclass
class InventoryItem:
    name: str
    unit_price: float
    quantity_available: int = 0

item1 = InventoryItem('A', 100, 1)
to_json = json.dumps(asdict(item1))
print(to_json)

このコードは、InventoryItemというDataclassを定義し、そのインスタンスを作成しています。そして、asdict()関数でDataclassを辞書に変換し、json.dumps()関数でJSON文字列に変換しています。

JSONからDataclassへの変換

次に、JSONからDataclassへの変換方法について見てみましょう。Pythonのjson.load()関数のobject_hook引数を使用することで、JSONのオブジェクトを簡単にDataclassに変換できます。

以下に一例を示します。

import json
from dataclasses import dataclass, is_dataclass

@dataclass
class InventoryItem:
    name: str
    unit_price: float
    quantity_available: int = 0

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

このコードは、DCJSONEncoderというカスタムJSONエンコーダを定義し、その中でdefaultメソッドをオーバーライドしています。このメソッドは、エンコードするオブジェクトがDataclassであればasdict()関数で辞書に変換し、そうでなければスーパークラスのdefaultメソッドを呼び出します。

以上、PythonのDataclassとJSONの相互変換について説明しました。この知識を活用して、Pythonのコーディングをより効率的に行いましょう。

投稿者 admin

コメントを残す

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