PythonのDataclassとJSONを相互に変換する方法について説明します。Pythonの標準ライブラリであるdataclasses
とjson
を使用します。
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のコーディングをより効率的に行いましょう。