JSON から Python の dataclass・TypedDict へ
JSON を Python の dataclass や TypedDict クラスに変換します。型ヒント、Optional フィールド、依存順に並んだ入れ子のクラスに対応。無料でブラウザー内で動作します。
依存関係が先に来るようにクラスを並べます。省略可能なフィールドの既定値は None で、TypedDict 出力は NotRequired(Python 3.11+)を使います。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
関連ツール
すべて表示JSON から Pythonとは?
JSON のサンプルから、@dataclass クラスまたは TypedDict 定義のどちらかで型付きの Python クラスを生成します。入れ子のオブジェクトは別々のクラスになり、それらを使うクラスより前に出力されるので、モジュールを問題なくインポートできます。
JSON から Pythonの使い方
- JSON 入力 に JSON のサンプルを貼り付けます(サンプルを読み込む や ファイルを開く も使えます)。
- ルート型の名前 を設定します(既定は
Root)。 - 出力スタイル を
@dataclassかTypedDictから選びます。 - 生成された Python のコードをコピーするか、ダウンロード してファイルとして保存します。
例
{"id":1,"name":"A","tags":["x"]} from dataclasses import dataclass
from typing import List
@dataclass
class Root:
id: int
name: str
tags: List[str] JSON から Pythonを使うべき場面
スクリプト、FastAPI のコード、テストで JSON ペイロードに型ヒントを付けたいときに使います。dataclass は入れ子の dict を自動では変換しません。その場合は dacite や pydantic などのライブラリを使うか、素の dict のままにできる TypedDict スタイルを選んでください。
JSON から Pythonの仕組み
サンプルを再帰的にたどり、各位置で見つかった型を集めます。オブジェクトの配列は 1 つの型にまとめられ、一部の要素にないキーはオプショナル、どこかで null になるキーは null 許容になります。整数と小数が混在する場合は浮動小数点型になり、それ以外で型が混在する場合は動的な型にフォールバックします。入れ子のオブジェクトは名前付きの型になり(キーのパスカルケースで、配列のキーは単数形にします:orders → Order)、名前が衝突した場合は数字の接尾辞が付きます。Python の出力では int、float、str、bool、List[T] を使い、null は Optional[T]、動的な値は Any にします。dataclass では必須フィールドが先に並び、オプショナルなフィールドには = None が付きます。識別子として使えないキー(class のような予約語を含む)は、# JSON key コメント付きでスネークケースに変更されます。TypedDict の出力では、ないキーに NotRequired を付け、識別子として使えないキーがある場合は関数形式の TypedDict("Name", {...}) 構文に切り替わります。
一般的な使用例
- mypy や Pyright 向けに JSON API のレスポンスへ型注釈を付ける
- 設定ファイル用の dataclass を作る
- Webhook のペイロードを TypedDict で記述する
- pydantic に移行する前の出発点となるモデルを生成する
よくある質問
必要な Python のバージョンは?
dataclass の出力は Python 3.7 以上で動作します。TypedDict の出力は NotRequired を使い、これは Python 3.11 以降の typing モジュールで利用できます(それ以前は typing_extensions が必要です)。
一部のフィールド名が変更されるのはなぜですか?
first-name や class のようなキーは属性名として使えないため、first_name / class_ となり、元の JSON キーを示すコメントが付きます。
JSON をそのまま dataclass に読み込めますか?
フラットなデータなら Root(**data) で動作します。入れ子のオブジェクトは、自分で変換するかヘルパーライブラリを使わない限り dict のままです。