Python で Dataclass を JSON に変換する
このチュートリアルでは、JSON root
ノードごとに dataclass
を作成するために Python で JSON がどのようにサポートされているかを学習します。 また、Python での辞書としての dataclass
の実装についても学習します。
dataclass
を Python で JSON に変換
JavaScript Object Notation または JSON は、データがプログラミング言語のテキストで構成されるスクリプト (実行可能) ファイルを使用して保存および転送されることを示します。
Python は、JSON 組み込みモジュールを介して JSON をサポートします。 したがって、JSON パッケージを Python スクリプトにインポートして、この機能を活用します。
JSON で使用される引用符で囲まれた文字列には、キーと値のマッピングの値が含まれています。 Python の辞書に匹敵します。
Python は JSON 機能をネイティブにサポートし、JSON は標準ライブラリの marshal および pickle モジュールのユーザーに似た API を表示します。
一方、dataclass
は、データを格納するために使用されるデータ転送オブジェクトを作成します。 これらのオブジェクトには、同等の比較、場合によっては表示のために、適切な定義メソッドが必要です。
dataclass
は、データ転送クラスのメソッドと短い構文を作成するために使用されます。
Python で辞書として dataclass
を実装する
Python 3.7 以降は、dataclass
デコレータをサポートする唯一のバージョンです。 これは、一般にデータ転送オブジェクトと呼ばれるオブジェクトを生成し、その唯一の機能はデータを格納することです。
問題は、これらのオブジェクトに正しい機能を提供するには、等値比較、表示などのメソッドを作成する必要があることです。
これらの方法は、開発に手間がかかり、エラーが発生しやすいものでなければなりません。 dataclass
はこれらすべてのメソッドを生成し、データ転送クラスに短い構文を与えます。
シリアライゼーションには、わずかに変更された (そしてやや効果的な) バージョンの dataclasses.asdict
を使用します。
初めて JSON を dataclass
インスタンスに逆シリアル化するときに、dataclass
フィールドを反復し、注釈付きの型ごとにパーサーを作成すると、プロセスが繰り返されるときにより効果的になります。
Python で JSON root
ノードごとに dataclass
を作成する
"users"
フィールドは "id"
と "name"
を持つオブジェクトの配列であるため、"Test"
と "User"
の 2つのクラスを作成する必要があることがわかります。
コード例:
from dataclasses import dataclass
from typing import List
@dataclass
class User:
id: 1
name: "Kelvin"
@dataclass
class Test:
id: 2
userid: " Jack"
users: List[User]
各 JSON 属性は、タイプ セーフな Python プロパティにマップする必要があります。
次のコードは、各 JSON ノードと属性を Python クラスとプロパティにマップします。 そのために、辞書を Python プロパティにマッピングする役割を担う Python クラスで static
メソッドを作成します。
コード例:
from typing import List
from dataclasses import dataclass, asdict, field
from json import dumps
@dataclass
class Students:
id: 1
name: "stu1"
@property
def __dict__(self):
return asdict(self)
@property
def json(self):
return dumps(self.__dict__)
test_object_1 = Students(id=1, name="Kelvin")
print(test_object_1.json)
出力:
{"id": 1, "name": "Kelvin"}
データ転送オブジェクトは dataclasses
によって作成され、それらにデータを格納するために使用されることに注意してください。 したがって、これらのオブジェクトには、同等の比較と場合によっては表示のために、正しいメソッドの定義が必要です。
データ転送クラスのメソッドと構文は、dataclass
を使用して作成されます。
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn