概要
dict -> obj のデシリアライズを Pydantic V2 を使ってやる方法を紹介します
pydantic の dataclass を使います
過去に JSONWizard を使った方法も紹介しています
環境
- Python 3.10.2
- pydantic 2.5.1
サンプルコード
from dataclasses import asdict
from pydantic.dataclasses import dataclass
@dataclass
class Profile:
lang: str
framework: str
@dataclass
class User:
id: int
name: str
profile: Profile
if __name__ == "__main__":
# dict -> obj
user_dict = {
"id": 1,
"name": "hawksnowlog",
"profile": {
"lang": "python",
"framework": "flask",
},
}
user = User(**user_dict)
print(user.id)
print(user.name)
print(user.profile.lang)
print(user.profile.framework)
# obj -> dict
print(asdict(user))
ちょっと解説
- ネストした構造でもいけます
- Optional など組み合わせれば任意の値もとれます
- BaseModel ではこの方法は使えません
- 各種フィールドは Field として定義することはできません
最後に
BaseModel として使えないのが少し残念ですが単純な dict との変換ならこれが一番簡単な方法かなと思います
ただサードパーティを使うので管理などは少し面倒です
本当に簡単な変換なのであれば純正の json モジュールだけでも何とかなります
0 件のコメント:
コメントを投稿