m moji kit v1.0.9
変換 JSON → Python dataclass

JSON から Python の dataclass を作る

JSON サンプルから Python の @dataclass / Pydantic / TypedDict を生成する方法を解説します。

解説

Python で JSON データを型付きで持つ選択肢は主に 4 つです。dict のまま使う、標準ライブラリの @dataclass、TypedDict、外部ライブラリの Pydantic です。 @dataclass は型ヒント付きの軽量データクラスを作りますが、バリデーションは行いません。Pydantic は宣言的な書き方でランタイム検証まで行うので、API のリクエスト/レスポンス検証向きです。TypedDict は型ヒントだけ欲しいケース向け。API は Pydantic、内部データは @dataclass が定番です。

サンプル入力(JSON)

{
  "id": 42,
  "name": "alice",
  "is_admin": false,
  "tags": ["editor"]
}

サンプル出力(Python dataclass)

from dataclasses import dataclass
from typing import List

@dataclass
class User:
    id: int
    name: str
    is_admin: bool
    tags: List[str]

使うときのコツ

  • · Pydantic v2 は v1 より高速。新規プロジェクトでは v2 を推奨
  • · Optional[X] は X | None と書ける(Python 3.10+)
  • · Pydantic の Field でバリデーションルールを宣言できる(min_length, ge, le など)

よくある質問

dataclass と Pydantic はどちらを使うべき?
ランタイム検証が必要なら Pydantic、内部データ構造なら dataclass。Pydantic は依存・起動コストがあるので、軽量に済ませたい場合は dataclass が向きます。
JSON のキーが Python のキーワードと衝突する場合は?
Pydantic v2 では Field の alias 引数で別名を割り当てられます。dataclass では難しいので、JSON 側のキーを変換してから渡すのが現実的です。
ネストしたオブジェクトはどう書く?
別の dataclass を定義し、フィールド型として参照します。Pydantic も同様に別モデルを参照できます。
snake_case と camelCase の混在はどう扱う?
Pydantic では `model_config = ConfigDict(populate_by_name=True)` と `Field(alias='camelCase')` で対応できます。標準 dataclass では json.loads 後に手で変換します。
datetime はどう扱う?
Pydantic は ISO 8601 文字列を datetime に自動変換できます。dataclass では json.loads 後に自前で datetime.fromisoformat() を呼びます。
ツールで自動化したい
datamodel-code-generator が JSON Schema や OpenAPI から Pydantic / dataclass を生成できる代表的なツールです。

関連ツール

{ }
JSON フォーマッタ
JSON を整形・圧縮・キーソートします。