JSON to Python — JSON から Python データクラスを生成
JSON から型ヒント付きの Python dataclass を生成。任意のフィールド、snake_case 命名、Pydantic 対応 — ブラウザだけで完結、アップロード不要。
JSON to Python Dataclass
Convert JSON to Python dataclass with type hints. Works entirely in your browser.
Python の型注釈システムは、かつてリンター向けのニッチな機能に過ぎませんでしたが、今では言語の中核を担う存在へと成長しました。Dataclass、TypedDict、Pydantic モデルは、ひとつの問いに対する 3 つの異なる答えです。それは「クラスごとに何百行ものボイラープレートを書かずに、Python で型安全に構造化データを表現するにはどうすればよいか?」という問いです。JSON-to-Python ジェネレータは JSON レスポンスを走査し、自身の構造を自知している型付き Python クラスを生成します。これは、型安全な API 利用、設定管理、データバリデーションへと踏み出す最初の一歩です。
Python におけるデータモデリングで意外と見落とされがちなのが、ランタイムバリデーションと型チェッカーバリデーションのどちらを選ぶかという選択です。Pydantic モデルはランタイムで検証します — int を期待する箇所に文字列を渡せば、即座に ValidationError を送出します。そのため、API 境界(FastAPI のエンドポイント、メッセージキュー、設定ファイルのパース)では Pydantic が正解になります。dataclass は型チェッカー(mypy、pyright)でのみ検証され、誤った型を渡しても IDE が警告するだけでコードはそのまま動きます。TypedDict はランタイムでは何もしません。型チェッカー向けの注釈にすぎません。外部からやって来るデータには Pydantic を、コード内部で生成され型安全に受け渡しされるデータには dataclass を、型チェッカーが強制のレイヤとなっているコードベースには TypedDict を選んでください。
dataclass を生成した後によく行われる次のステップは、json.loads() や requests.get().json() と組み合わせて、JSON キーを dataclass のフィールドに対応付けるカスタムデコーダに渡すことです。FastAPI の場合は、生成した Pydantic モデルをルートパラメータに包むだけで、バリデーションとシリアライズは FastAPI が自動で行います。SQLAlchemy の場合は、生成された dataclass が ORM モデルの属性となり、テーブルのマッピングは手動で追加します。生成されたクラスはスキーマであり、配線作業こそがアプリケーション本体です。
使い方
JSON を貼り付ける
JSON オブジェクトをドロップするか、JSON 文字列を貼り付けます。ジェネレータが各フィールドの Python 型を推論し、すべての属性に型ヒント付きの `@dataclass` を出力します。
クラスのスタイルを選ぶ
`@dataclass`(標準ライブラリ)、`TypedDict`(型チェックのみ、ランタイムなし)、`pydantic.BaseModel`(Pydantic による完全なバリデーション) の中から選べます。それぞれのスタイルには異なる役割があります。
コピーまたは .py ファイルをダウンロード
Python クラスをクリップボードにコピーするか、.py ファイルとしてダウンロードします。出力は Python 3.9+ と標準ライブラリで動作します — dataclass オプションには追加の依存パッケージは不要です。
よくある質問
dataclass、TypedDict、Pydantic のどれを選ぶべきですか?
デフォルトは dataclass です — 型ヒントを持ち、`dataclasses.asdict(dc)` でラウンドトリップ変換ができ、追加パッケージは不要です。TypedDict は型チェッカー専用 (mypy、pyright) の構成要素で、ランタイムのオーバーヘッドはゼロです。Pydantic モデルはバリデーション、パース、スキーマ生成を追加しますが、`pydantic` パッケージが必要です。
camelCase の JSON キーはどう扱われますか?
デフォルトでは、camelCase の JSON キー (`userId`、`createdAt`) は snake_case の Python `@dataclass` フィールド (`user_id`、`created_at`) として出力され、`field(metadata={'json': 'userId'})` というアノテーションが付けられます。「元のケースをそのまま保持」をオンにすると、JSON に書かれた通りのフィールド名で出力されます。
任意のフィールドはどのように扱われますか?
サンプルで null のフィールドや、一部の配列要素に存在しないフィールドは、いずれも `Optional[T]` 型になり、デフォルト値は `None` になります。型ヒント `Optional[str]` は、JSON の `string | null` に相当する Python の書き方です。
ネストされた JSON オブジェクトはどのようになりますか?
ネストされたオブジェクトは、ネストされた dataclass または Pydantic モデルクラスになります。TypedDict モードでは、ネストされたオブジェクトはネストされた TypedDict になります。ネスト構造は JSON の構造をそのまま反映し、`user.profile.name` というパスは `profile: Profile` フィールドを持つ `User` クラスを生成します。
Python の予約語も扱えますか?
はい、`class`、`import`、`from`、`pass`、`type` といった JSON キーは、Python クラス側では `class_`、`import_`、`from_`、`pass_`、`type_` として出力されます。`metadata={'json': 'class'}` というアノテーションが、シリアライズ用に元のキーを保持します。
制限事項
- async や FastAPI の統合はなし出力されるのはデータクラスのみです。FastAPI のルート定義、非同期データベースマッピング、依存性注入の配線は生成されません — dataclass の周囲に手動で追加してください。
- 曖昧なケースでは推論型が Any になる混合型の JSON 配列や、深く多相的な値は `Any` と推論されます。API の保証がサンプルから読み取れる範囲より強い場合は、より狭い型ヒントを手動で追加してください。
- Pydantic V2 と V1 の違いPydantic オプションは Pydantic V2 スタイルのモデル (`model_validate`、`model_dump`) を出力します。Pydantic V1 のコードベースの場合は、メソッド呼び出しを手動で `.parse_obj` と `.dict` に書き換えてください。
プラットフォーム別の注意点
- macOS
- PyCharm、Pylance 入り VS Code、jedi 入り vim のいずれも、生成された dataclass を正しく扱えます。開発中に API レスポンスから都度生成したい場合は、ブラウザツールが便利です。
- Windows
- 生成された dataclass は任意の Python 環境で動作します。API エクスプローラからコピーした内容を手早く dataclass にしたい場合は、ブラウザツールが手軽です。
- Linux
- コマンドラインでの作業には、`datamodel-code-generator` が標準的な同等ツールです。Python 環境や追加パッケージが手元に使えない状況で都度生成したい場合は、ブラウザツールが適切な選択肢です。
- Web
- 完全にクライアントサイドで動作します。生成はミリ秒単位で完了します — 貼り付けて、コピーして、終わりです。