JSONデータをJSON Schemaで検証する
左に検証したいJSONデータ、右にJSON Schemaを貼り付けて「検証」を押すと、適合しているかどうかと、違反しているキーパスごとの理由を一覧表示します。すべてブラウザ内で処理し、外部へ送信しません。
問題点の一覧
使い方とAIOクエリ例
APIのリクエスト/レスポンス検証、設定ファイルの構造チェック、フォーム入力値の型検査などに使えます。入力はブラウザ内だけで処理し、外部へ送信しません。
- 基本の例:
json_schema_validator.html?input={"name":"kiku"}&schema={"type":"object","required":["name"]}&format=json format=jsonは機械可読JSON(valid/error_count/issues[])、format=rawはパス: 内容形式の行だけを返します。同じURLなら常に同じ結果になります。
対応キーワード一覧
よく使う主要キーワードに対応しています。未対応のキーワードは注釈として無視され(JSON Schemaの仕様どおり)、エラーにはなりません。
| 分類 | 対応キーワード |
|---|---|
| 型 | type(string/number/integer/boolean/array/object/null、複数指定可) |
| 値 | enum / const |
| オブジェクト | properties / required / additionalProperties / patternProperties / minProperties / maxProperties |
| 配列 | items(単一・タプル・prefixItems)/ additionalItems / minItems / maxItems / uniqueItems |
| 文字列 | minLength / maxLength / pattern / format(email/date/date-time/time/uri/ipv4/ipv6/uuidの簡易判定) |
| 数値 | minimum / maximum / exclusiveMinimum / exclusiveMaximum / multipleOf |
| 結合子 | allOf / anyOf / oneOf / not |
| 参照 | $ref(同一スキーマ内のローカル参照のみ。例: #/$defs/xxx) |
JSON Schema 検証は、手元のJSONデータが「JSON Schemaで定めた形」に沿っているかどうかを、ブラウザ内だけで判定するツールです。JSON整形やJSON修復は構文(カッコや引用符の対応)を見るだけですが、本ツールはさらに一段深く、「name は文字列で必須」「age は0以上150以下の整数」「tags は重複のない配列」といった構造上の契約(コントラクト)を満たしているかまで踏み込んで検査します。違反があれば、どのキーパスで・どのキーワードに・なぜ違反したのかを一覧で返すため、原因の切り分けに迷いません。データもスキーマもブラウザ内のJavaScriptだけで解析・照合し、外部へ送信することはありません。
使い方・サンプル・結果例・注意点
使い方
左の「検証するJSONデータ」に確認したいJSON、右の「JSON Schema」に契約となるJSON Schemaを貼り付け、「検証」を押します。結果には valid(適合)または invalid(不適合)の判定と問題件数が表示され、不適合の場合はキーパスごとに「どのキーワード(type・required・minimum など)に違反したか」と理由が一覧に並びます。データが解析できない場合は invalid_json_input、スキーマが解析できないか対応外の構造(外部URLを指す$ref・不正な正規表現・未知のtype名など)を含む場合は invalid_json_schema のエラーになります。対応キーワードは本ページ下部の一覧表にまとめています。
サンプル入力
検証するJSONデータ {"name":"","age":"17","email":"invalid-email","tags":["admin","admin"]} と JSON Schema {"type":"object","required":["name","age"],"properties":{"name":{"type":"string","minLength":1},"age":{"type":"integer","minimum":0,"maximum":150},"email":{"type":"string","format":"email"},"tags":{"type":"array","items":{"type":"string"},"uniqueItems":true}},"additionalProperties":false}
結果例
上のサンプルを検証すると invalid・問題件数4件になります。内訳は、/name が minLength 違反(文字数が最小値1未満=空文字)、/age が type 違反(期待: integer に対して文字列の "17")、/email が format 違反(email の形式に一致しない)、/tags が uniqueItems 違反("admin" が重複)です。format=raw では「/name: 文字数が最小値(1)未満です」のように、パスとキーワード違反の理由を1行ずつ返します。同じ入力なら常に同じ判定・同じ順序(キーパスの走査順)で返るため、CIやテストの期待値としてそのまま使えます。
注意点
対応キーワードは本ページ下部の一覧表にまとめています。if/then/else、dependentRequired、dependentSchemas、contains、propertyNames、unevaluatedProperties、外部URLを指す $ref や $id をまたぐ複数文書の解決には対応していません。未知のキーワードは、JSON Schema の仕様どおり注釈として無視するだけで、エラーにはしません。規模の上限は、JSONデータとスキーマのそれぞれで 50,000 文字、スキーマの入れ子や $ref の参照は 60 階層までです。超えた場合は、それぞれ too_long、too_deep のエラーになります。問題点は最大 200 件まで表示し、超える場合は末尾に「先頭 200 件まで表示」という注記が付きます。すべてブラウザ内で処理するため、入力値を外部へ送信することはありません。
こんなときに使えます
- 外部APIから届いたレスポンスが、契約したJSON Schemaどおりの形(必須フィールド・型・値域)を満たしているか手元で確認する
- アプリの設定ファイル(JSON)を編集した後、うっかり必須キーを消していないか・型を誤っていないかを配布前にチェックする
- フロントエンドのフォーム入力をJSONにまとめ、送信前にAPI側の期待するスキーマと食い違いがないか検査する
- OpenAPIやJSON Schemaで定義したリクエスト/レスポンスのサンプルデータが、仕様書と実データで乖離していないかレビューする
よくある質問
JSON整形・JSON修復との違いは何ですか?
JSON整形はインデントの見やすさを整えるツール、JSON修復は末尾カンマやシングルクォートなど構文の壊れを直すツールで、いずれも「JSONとして正しい構文か」だけを扱います。本ツールはその一段上、「JSONとして正しい上で、さらに決められた形(型・必須項目・値の範囲など)を満たしているか」という構造上の契約を検査します。たとえば {"age": "20"} は構文として正しいJSONですが、age が整数であるべきスキーマに対しては不適合(文字列だから)と判定されます。この違いを区別するために本ツールは既存のJSON整形・修復とは別の専用ツールにしています。
どのJSON Schemaのdraft(バージョン)に対応していますか?
特定のdraft(Draft-07やDraft 2020-12など)を宣言的に切り替える機能はなく、$schema キーワードの値は読み飛ばして無視します。その代わり、draftをまたいで共通によく使われる主要キーワード(type・required・properties・items・enum・allOf/anyOf/oneOf・ローカルな$refなど)を1つの固定ルールセットとして実装しています。draft間で挙動が分かれがちな細部(items配列とprefixItemsの併用ルール、if/then/elseなど)については本ページ下部の対応キーワード一覧で範囲を明示しているので、判定前に確認してください。
$ref はどこまで使えますか?
同じJSON Schemaファイルの中を指すローカル参照(# から始まるJSON Pointer、例: #/$defs/address や #/definitions/user)だけに対応しています。別ファイルや別URLを指す外部参照(例: https://example.com/schema.json#/foo)、および $id を使って複数のスキーマ文書をまたいで解決する仕組みには対応していません。外部参照が含まれる場合は invalid_json_schema のエラーになるので、検証前にスキーマを1ファイルに統合(インライン化)してから貼り付けてください。
true/false 以外の余分なプロパティを禁止したいときはどうすればよいですか?
additionalProperties を false に設定してください。properties に列挙していないキーがデータ側に存在すると、そのキーパスに additionalProperties の違反として報告されます。逆に additionalProperties を省略、または true にすると、properties にないキーは自由に許可されます(部分的にだけ許可したい場合はスキーマとして additionalProperties にサブスキーマを指定することもできます)。
"required": ["age"] があるのに age がなくてもエラーにならないことがあるのはなぜですか?
required は「対象がオブジェクトである場合」にのみ評価されるキーワードだからです。JSON Schemaの仕様では、キーワードはそれぞれ対応する型のインスタンスにだけ適用され、型が違えば単に無視されます。たとえばデータ全体が配列や文字列であれば、properties や required、additionalProperties は最初から評価対象になりません。まず type: "object" を指定してオブジェクトであることを保証したうえで required を使うと、意図どおりに検証できます。
貼り付けたJSONデータやスキーマはサーバーに送信されますか?
送信しません。JSONの解析もスキーマとの照合もすべてブラウザ内のJavaScriptで完結し、入力した内容が外部へ送られることはありません。APIレスポンスや設定ファイルには接続情報や個人情報が含まれることがあるため、外部送信しない設計にしています。同じURL・同じ入力であれば常に同じ判定結果になります。