シンプルなJSONからPython Dataclassへの変換
フラットなJSONオブジェクトを適切に型付けされたフィールドを持つPython dataclassに変換する方法を学びます。str、int、float、boolの型アノテーションを解説します。
Dataclasses
詳細な説明
JSONからPython Dataclassへ
最もシンプルな変換は、フラットなJSONオブジェクトをPythonの @dataclass に変換することです。各JSONキーは値から推論された型アノテーション付きのフィールドになります。
JSONの例
{
"id": 42,
"name": "Alice",
"email": "alice@example.com",
"active": true,
"score": 98.5
}
生成されるPython
from dataclasses import dataclass
@dataclass
class User:
id: int
name: str
email: str
active: bool
score: float
型マッピングルール
| JSON型 | Python型 |
|---|---|
| string | str |
| number (整数) | int |
| number (小数) | float |
| boolean | bool |
| null | None |
Pythonは int と float を区別するため、42 は int に、98.5 は float にマッピングされます。これはTypeScriptのように単一の number 型を使用する言語よりも正確です。
なぜDataclassなのか?
Dataclass(Python 3.7で導入)は以下を提供します:
- 自動生成される
__init__— ボイラープレートのコンストラクタが不要です。 __repr__と__eq__— デバッグとテストに便利です。- 型アノテーション — IDEの自動補完とmypyやpyrightによる静的解析が可能です。
- イミュータビリティオプション —
frozen=Trueを設定して不意の変更を防げます。
使用方法
import json
data = json.loads('{"id": 42, "name": "Alice", "email": "alice@example.com", "active": true, "score": 98.5}')
user = User(**data)
print(user.name) # "Alice"
シンプルなdataclassはすべてのJSON-to-Python変換の基礎です。このパターンを理解すれば、ネストされたオブジェクト、オプショナルフィールド、複雑な構造への展開は自然に進められます。
ユースケース
REST APIからJSONペイロードを受け取り、IDEの自動補完が効き、mypyでタイプミスを検出でき、デバッグ時にクリーンな__repr__を提供する型安全なPythonクラスが必要な場合に使用します。