JSON Schema生成
JSONを入力して「生成」を押すと、構造を解析してJSON Schema(Draft 2020-12)のたたき台を自動生成します。requiredは任意で出力でき、不正なJSONはエラー位置の目安とともに表示します。
入力例
requiredを出力しません(1件のサンプルからは必須かどうかを判定できないため)。ONにすると、サンプルに現れたプロパティを必須として出力します。配列要素ごとに構造が異なる場合は、全要素に共通するプロパティのみを必須にします。 結果
JSONを入力して「生成」を押してください。
このツールでできること
JSON Schema生成の主な機能です。
- JSONの構造からJSON Schema(Draft 2020-12)のたたき台を自動生成できます
- object/array/string/integer/number/boolean/nullの型を自動判定します
- ネストしたObject・Object配列・プリミティブ配列に対応します
- 配列内の型混在を単一型として誤判定せず、type配列で表現します
- 「すべてのプロパティを必須にする」を選んだ場合のみrequiredを出力します
- 不正なJSONの場合はエラー位置・原因の目安を表示します
- 処理はブラウザ内で完結し、入力を外部へ送信しません
手順を見る
- JSONを入力します
- 必要に応じて「すべてのプロパティを必須(required)にする」を切り替えます
- 「生成」を押します
- 生成されたJSON Schemaを確認し、必要に応じてコピーします
こんなときに使えます
こんな場面でJSON Schema生成が役立ちます。
利用シーンを見る
- APIレスポンスの構造をSchema化し、ドキュメントや検証の土台にしたいとき
- JSON Schema Validatorで使うSchemaのたたき台をすばやく作りたいとき
- ネストが深いJSONや配列を含むJSONを、手作業でSchemaに書き起こす手間を減らしたいとき
- AIや外部APIから取得したJSONの構造を整理・把握したいとき
JSON Schema生成の仕組みと注意点
このツールの動作の仕組みを説明します。
詳しい解説を見る
対応するJSON Schema Draftは2020-12固定です
生成したSchemaには"$schema": "https://json-schema.org/draft/2020-12/schema"を含めます。複数Draftの選択には対応していません。JSON Schemaバリデーターも既定でDraft 2020-12として検証するため、生成したSchemaをそのまま確認できます。
requiredは既定で出力されません
1件のサンプルJSONだけからは、そのプロパティが本当に必須かどうかを判定できません。そのため既定ではrequiredを出力しません。「すべてのプロパティを必須(required)にする」をONにすると、サンプルに現れたプロパティを必須として出力します。配列要素ごとに構造が異なる場合(Object配列)は、全要素に共通するプロパティのみを必須にします(一部の要素にしかないプロパティまで必須化すると、その要素自身が生成したSchemaに違反してしまうためです)。
型が混在する場合はtype配列、構造が異なる場合はanyOfで表現します
配列の要素やObject配列の同じプロパティで複数の型が出現する場合、単一の型として誤判定せず"type": ["boolean", "integer", "string"]のように表現します。Objectや配列とプリミティブ値が混在するなど、型配列では表現できない場合に限りanyOfを使います(排他性を保証できないためoneOfは使いません)。推論できない情報を勝手に補完することはありません(空配列の要素の型を推測しない、nullだけの値から元の型を推測しない、など)。
入力上限・ネスト深さの上限(Web Worker不使用)
入力は最大500,000文字、JSON構造のネストは最大64階層までを上限としています(JSON構文チェックと同じ上限です)。上限を超える入力は解析前に検出し、エラーとして表示します。通常の構造化されたJSONであれば上限内でも高速に処理できるため、現時点ではWeb Workerを使わずブラウザのメインスレッドで直接処理しています。
Schemaの検証・JSONへの変換・型生成は対象外です
本ツールはJSONサンプルからSchemaのたたき台を生成することに特化しています。生成したSchemaでデータを検証したい場合はJSON Schemaバリデーターを、JSONの構文チェックのみ行いたい場合はJSON構文チェックをご利用ください。OpenAPIへの直接変換・TypeScript等の型生成・Schemaの手動編集には対応していません。入力されたJSONを外部サーバーへ送信することもありません。
よくある質問
対応しているJSON Schema Draftは何ですか?
Draft 2020-12に固定しています。生成したSchemaには"$schema"としてDraft 2020-12のURIを含めます。複数Draftの選択には対応していません。
requiredはなぜ既定で出力されないのですか?
1件のサンプルJSONだけからは、そのプロパティが本当に必須かどうかを判定できないためです。「すべてのプロパティを必須(required)にする」をONにすると、サンプルに現れたプロパティを必須として出力します。配列要素ごとに構造が異なる場合は、全要素に共通するプロパティのみを必須にします。
配列内の型が混ざっている場合はどうなりますか?
単一の型として誤判定せず、"type": ["boolean", "integer", "string"]のように複数型で表現します。
anyOfとoneOfのどちらを使いますか?
Objectや配列とプリミティブ値が混在するなど、type配列では表現できない場合に限りanyOfを使います。oneOfは排他性(いずれか1つにしか一致しないこと)を保証できないため使用しません。
生成したSchemaをJSON Schema Validatorでそのまま使えますか?
はい。JSON Schema Validatorも既定でDraft 2020-12として検証するため、生成結果をそのまま貼り付けて確認できます。Pipeline機能を使えば、生成結果を直接送ることもできます。
不正なJSONを入力するとどうなりますか?
Schemaは生成されず、「JSONとして正しく解析できません」という表示とともに、可能な範囲で構文エラーの位置(行・列)と原因の目安を表示します。
入力サイズやネストの深さに上限はありますか?
はい。入力は最大500,000文字、ネストは最大64階層までです(JSON構文チェックと同じ上限です)。上限を超える入力は解析前にエラーとして表示します。