format / schema
JSON Schema生成ツール
JSONデータを貼り付けるだけでJSON Schema(draft-07)を自動生成します。 型推論・必須フィールド・ネスト構造をブラウザ内で解析。入力データはサーバーに送信されません。
// 「スキーマ生成」ボタンを押すと結果がここに表示されます使い方
01- JSON入力エリアにスキーマを生成したいJSONデータを貼り付けます
- タイトルフィールドに任意のスキーマ名を入力します(省略可)
- 「スキーマ生成」ボタンを押すと、JSON Schema(draft-07)が生成されます
- 生成されたスキーマは「コピー」ボタンでクリップボードにコピーできます
- 配列の場合は最初の要素の型をもとに
itemsスキーマを生成します
実装コード
02コアロジックは再帰的な型推論で実装しています。buildSchema 関数が値の型を判定し、オブジェクト・配列を再帰的に処理します。外部ライブラリ不要でそのままコピーしてご利用いただけます。
export type Result<T> = { ok: true; output: T } | { ok: false; error: string }
export function generateJsonSchema(value: unknown, title?: string): object {
const schema = buildSchema(value)
if (title && typeof schema === 'object' && schema !== null) {
return { $schema: 'http://json-schema.org/draft-07/schema#', title, ...schema }
}
return { $schema: 'http://json-schema.org/draft-07/schema#', ...schema as object }
}
function buildSchema(value: unknown): object {
if (value === null) return { type: 'null' }
if (typeof value === 'boolean') return { type: 'boolean' }
if (typeof value === 'number') {
return Number.isInteger(value) ? { type: 'integer' } : { type: 'number' }
}
if (typeof value === 'string') return { type: 'string' }
if (Array.isArray(value)) {
if (value.length === 0) return { type: 'array', items: {} }
return { type: 'array', items: buildSchema(value[0]) }
}
if (typeof value === 'object') {
const obj = value as Record<string, unknown>
const properties: Record<string, object> = {}
const required: string[] = []
for (const [key, val] of Object.entries(obj)) {
properties[key] = buildSchema(val)
if (val !== null && val !== undefined) required.push(key)
}
const schema: Record<string, unknown> = { type: 'object', properties }
if (required.length > 0) schema.required = required
return schema
}
return {}
}
export function generateJsonSchemaFromString(input: string, title?: string): Result<string> {
try {
const parsed = JSON.parse(input)
const schema = generateJsonSchema(parsed, title)
return { ok: true, output: JSON.stringify(schema, null, 2) }
} catch (e) {
return { ok: false, error: `JSONパースエラー: ${(e as Error).message}` }
}
}よくある使用例・注意点
03APIレスポンスのバリデーションスキーマ作成
REST APIのレスポンスJSONを貼り付けるだけで、バリデーション用のJSON Schemaを素早く生成できます。生成したスキーマをAjvやzodのベースとして活用することで、型安全なAPI連携を実現できます。
OpenAPI / Swagger仕様書の作成補助
OpenAPI仕様書のcomponentsセクションに掲載するスキーマを手動で書く手間を省けます。実際のレスポンスデータからスキーマを生成し、必要に応じて手動で調整する用途に最適です。
配列の型推論について
配列の場合、最初の要素(index: 0)の型をもとに
items スキーマを生成します。配列内に複数の型が混在する場合は、生成後に手動で oneOf などに修正してください。null値と required フィールドの扱い
プロパティの値が
null の場合は required から除外されます。実際の要件に応じて、必要なフィールドを required に追加してください。プライバシーについて
入力したJSONデータはブラウザ内のみで処理されます。サーバーには一切送信されないため、機密情報を含むAPIレスポンスや設定ファイルも安全に扱えます。
関連ツール
04ソースコード
05このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。
GitHub でコードを見る →