JSON Schema → Pydantic
ブラウザ内で JSON Schema を Pydantic v2 のモデルコードに変換。スキーマを貼ると、貼り付けられる Python クラスがそのまま得られます。LLM の構造化出力ワークフローに便利。
上に入力すると結果が表示されます。
用途
JSON Schema と Pydantic は構造化オブジェクトを記述する 2 大手段です。JSON Schema は OpenAPI、LLM の function calling、構造化出力で共通言語となっており、Pydantic は Python のデファクトのバリデーションライブラリです。一方を持っていてもう一方が欲しい、という場面は頻繁にあります。本ツールは一方向の変換を担当します。JSON Schema を貼り付けると、.py にそのまま貼り付け可能な Pydantic クラスが得られます。
使うべきタイミング
- LLM の構造化出力。 OpenAI の
response_formatや Anthropic の tool-use はどちらも JSON Schema を受け付けます。設計が固まった後、Python 側でバリデーションとフィールドアクセスのために Pydantic モデルが欲しくなります。 - OpenAPI クライアント生成。 OpenAPI 仕様には JSON Schema が含まれます。フル機能の codegen を入れずに、対応する Pydantic モデルを得る近道。
- Schema から Python への移行。 既存の JSON Schema バリデーションを Pydantic に置き換えたい場合、貼り付け→雛形→手直し、という流れに使えます。
- 素早い足場作り。 ノートブックで JSON で構造を試したものを、貼り付け 1 回で本物のモデルにできます。
対応している項目
type: object+properties+required→ ネストした BaseModel クラス。type: array+items→List[X]。- プリミティブ:
string→str、integer→int、number→float、boolean→bool、null→None。 - string の
format:date-time→datetime、email→EmailStr、uri/url→HttpUrl、uuid→UUID。 enum→Literal[...]、const→Literal[X]。oneOf/anyOf→Union[...]。null バリアントがあればOptional[...]に畳まれます。type: ["string", "null"]→Optional[str]。description→Field(..., description=...)。default→ フィールドのデフォルト値。minimum/maximum/minLength/maxLength→Field(ge=..., le=..., min_length=..., max_length=...)。- Python 識別子として不正な名前はサニタイズされ、
alias=で元のキーを保持。モデルはpopulate_by_name=Trueで設定されます。 - ネストしたオブジェクトはネストクラスになり、
titleがあればそれを、なければフィールド名から命名されます。 $defs/definitionsは別クラスとして出力されます。
未対応(今のところ)
- 外部
$ref(URL 参照)。$defsへのローカル参照は対応。 patternProperties— TODO コメントを出力。additionalPropertiesをスキーマで指定する形 — TODO コメント。- 多元
allOf合成。要素 1 つのallOfは展開されます。 patternベースのカスタムバリデーション — フィールドは出すが正規表現は省略。必要なら貼り付け後に@field_validatorを追加してください。
よくある注意点
- Pydantic v2 と v1。 既定は v2(最新)。v1 のコードベースならドロップダウンで切り替えてください。
Field(...)、model_config対class Config:、バリデーターデコレータの違いに注意。 - 出力はあくまでスタート地点。 複雑な Union や再帰型は必ず見直してください。
- 名前は重要。 「Root class name」がトップレベルのクラス名を決めます。サブクラスは
titleがあればそれを使い、なければフィールド名から命名されます。 - v2 の Required と Optional。 デフォルトなしの required は
name: str = Field(...)。Optional はNoneをデフォルトにOptional[T]で包まれます。