JSON Schema バリデータ
最終更新:2026年10月2日
JSON ドキュメントを JSON Schema に照らして検証し、満たされなかった制約をそのパスとともに一覧します。ドキュメントと Schema はどちらもブラウザ内で解析・検査されます。
検査する内容
JSON Schema は、文書が取ってよい形を記述します。どのプロパティがあり、それぞれがどの型で、どの範囲やパターンが許されるか、というものです。このページはスキーマに照らして文書を検査し、満たさない箇所をすべて、位置が分かるようパス付きで一覧します。
対応するキーワードは次のとおりです。type、const、enum、required、properties、additionalProperties、minProperties、maxProperties、items(単一スキーマ、またはスキーマのタプル)、minItems、maxItems、uniqueItems、minLength、maxLength、pattern、minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf、allOf、anyOf、oneOf、not、そして同じスキーマ内を指すローカルの $ref です。
意図的に行わないこと
- リモートの
$refは解決しません。同じスキーマ内のポインタ(#/$defs/…、#/definitions/…)だけを解決します。別のファイルを取りに行くことはネットワーク要求を意味し、それはまさにこのツールが避けようとしていることです。 formatは検証ではありません。近年のドラフトではformatは注記であり強制されません。ここでもその扱いで、email形式は不正なアドレスを拒否しません。- 一部のキーワードは未実装です:
patternProperties、unevaluatedProperties、if/then/else、dependentSchemas、contains。これらを使うスキーマでも他のキーワードは検査されますが、未実装のキーワードは強制されません。したがって、これらに依存したスキーマでここが「有効」でも、完全な適合結果とはみなさないでください。 - スキーマのメタ検証はしません。構文として有効な JSON でも論理が誤ったスキーマは、単に何にも一致しないことがあります。このページが検査するのは文書であり、スキーマ自体の正しさではありません。
エラーの読み方
失敗はそれぞれパスで報告されます。$ は文書のルート、ドットはプロパティへ進み、角括弧は配列の添字です。required は、そのプロパティを含むべきオブジェクトの位置で報告されます——制約はオブジェクトにあり、欠けているプロパティにあるのではないからです——メッセージにプロパティ名が示されます。anyOf と oneOf は失敗したインスタンスに 1 件だけ報告され、分岐ごとではありません。分岐のエラーで埋め尽くされると本当の問題が見えなくなります。
よくある質問
対応している JSON Schema のキーワードは?
type、const、enum、required、properties、additionalProperties、minProperties、maxProperties、items(単一のスキーマまたはスキーマのタプル)、minItems、maxItems、uniqueItems、minLength、maxLength、pattern、minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf、allOf、anyOf、oneOf、not、そしてローカルの $ref です。
意図的に対応していないものは?
リモートの $ref(同じスキーマ内のポインタのみ解決します)、検証としての format、patternProperties、unevaluatedProperties、if/then/else、dependentSchemas。これらを使うスキーマでも上記のキーワードは検証されますが、未実装のキーワードは強制されません。そのため、これらに依存したスキーマでここが「有効」でも完全な適合結果とはみなさないでください。
検証はサーバーで行われますか?
いいえ。ドキュメントとスキーマはどちらもブラウザ内で JSON.parse により解析され、メモリ上で検査されます。何もアップロードされず、ネットワークを切断しても動作します。
必須プロパティのエラーが親のパスで報告されるのはなぜですか?
制約がそこにあるからです。JSON Schema の required はオブジェクトに適用され、欠けているプロパティに適用されるわけではありません。したがってエラーはオブジェクトのパス($.name ではなく $ など)で報告され、メッセージにプロパティ名が示されます。
anyOf と oneOf はどう報告されますか?
失敗したインスタンスに対して 1 件だけ報告し、分岐ごとには報告しません。anyOf はどの分岐にも一致しないとき失敗し、oneOf は一致した分岐の数が 1 でないとき失敗します。メッセージには一致した数が示されます。各分岐の内部エラーを並べると本当の問題が埋もれてしまいます。
スキーマ自体の誤りも教えてくれますか、それとも文書だけですか?
文書をスキーマに照らして検査します。スキーマ自体が有効な JSON でなければ、その旨を別に伝えます。スキーマを JSON Schema のメタスキーマで検証はしないので、構文は正しくても論理が誤ったスキーマは、単に何にも一致しないことがあります。