ToolConvoyToolConvoyv2.6
DEV

JSON to Python — JSON から Python データクラスを生成

JSON から型ヒント付きの Python dataclass を生成。任意のフィールド、snake_case 命名、Pydantic 対応 — ブラウザだけで完結、アップロード不要。

● ローカル動作 · タブ内で生成ページ読み込み以降のツールによる通信:0件

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 モデルの属性となり、テーブルのマッピングは手動で追加します。生成されたクラスはスキーマであり、配線作業こそがアプリケーション本体です。

広告

使い方

  1. JSON を貼り付ける

    JSON オブジェクトをドロップするか、JSON 文字列を貼り付けます。ジェネレータが各フィールドの Python 型を推論し、すべての属性に型ヒント付きの `@dataclass` を出力します。

  2. クラスのスタイルを選ぶ

    `@dataclass`(標準ライブラリ)、`TypedDict`(型チェックのみ、ランタイムなし)、`pydantic.BaseModel`(Pydantic による完全なバリデーション) の中から選べます。それぞれのスタイルには異なる役割があります。

  3. コピーまたは .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
完全にクライアントサイドで動作します。生成はミリ秒単位で完了します — 貼り付けて、コピーして、終わりです。
広告
広告