スキーマとデータを貼り付けると一致しない箇所が分かります。「データからスキーマを生成」はサンプルから下書きを作り、その下書きがサンプルを通過することを確かめます。送信はありません。
ブラウザ内でローカルに実行JSON Schema オブジェクトを使用します。#/ で始まる参照はこのページ内で解決します。
検証するデータを貼り付けるか、代表的なサンプルを貼り付けて初期スキーマを生成します。
検証が読むのは type、enum、const、allOf、anyOf、oneOf、not、if/then/else、properties、patternProperties、additionalProperties、propertyNames、required、dependentRequired、minProperties、maxProperties、items、prefixItems、additionalItems、minItems、maxItems、uniqueItems、contains、minLength、maxLength、pattern、format(email、uuid、date、time、date-time、uri、uri-reference、ipv4、ipv6、hostname)、minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf、そしてローカルの $ref(データをたどって再帰する参照を含む)です。draft-04 の真偽値形式の exclusiveMinimum/exclusiveMaximum と配列形式の items も読みます。それ以外のキーワードと format はそのままにするため、本番の規則は適合する検証器で確認してください。
スキーマとデータはブラウザー内に残り、送信はありません。問題は見つかった位置とともに一覧表示され、一覧は 100 件で打ち切られます。「データからスキーマを生成」はサンプルから下書きを書き、そのサンプルを下書きで再検証します。
JSON Schema と JSON 文書を貼り付けると、データがスキーマに反する箇所がすべて分かります。検証はこのタブ内で実行されるため送信は一切なく、ネットワークを切っても動作します。
生成は逆方向の処理です。貼り付けたサンプルを読み、配列の要素はすべての項目をまとめて、required はどのオブジェクトにもあるキーだけにして下書きスキーマを書き、その下書きでサンプルを検証します。自分のサンプルを説明できない下書きは、黙って残さず報告します。
type、enum、const、allOf、anyOf、oneOf、not、if/then/else。properties、patternProperties、additionalProperties、propertyNames、required、dependentRequired、minProperties、maxProperties。items、prefixItems、additionalItems、minItems、maxItems、uniqueItems、contains。minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf。minLength、maxLength、pattern。そしてローカルの $ref(データをたどって再帰する参照を含む)。draft-04 の真偽値形式の exclusiveMinimum/exclusiveMaximum と配列形式の items も読みます。
format の検査は email、uuid、date、time、date-time、uri、uri-reference、ipv4、ipv6、hostname に対応します。2024-02-30 のような日付や 99:99 のような時刻は、文字の形だけでなく暦と時計を確認するため拒否されます。それ以外の format 名はそのままにします。仕様では format は注釈扱いなので、このページは素の実装より厳しく判定します。
enum、const、uniqueItems は値を構造で比較します。{"a": 1, "b": 2} と {"b": 2, "a": 1} は 1 つの値であり、2 つではありません。以前の版は JSON の文字列を比較していたため、有効な enum 値を拒否し、重複した配列要素を見逃すという両方向の誤りがありました。
minLength と maxLength はコードポイントで数えるため、サロゲートペアで書かれた絵文字も 1 文字です。
配列の項目はすべての要素をまとめて 1 つにします。型が混ざった配列は anyOf になり、オブジェクトはプロパティごとに統合し、required はどのオブジェクトにもあるキーだけにします。空のオブジェクトや空の配列から空の required は作りません。
UUID、メールアドレス、日付、日時、URI に見える文字列には対応する format のヒントを付けるので、単なる型より使える下書きになります。ただし最初の下書き用で、契約として使うものではありません。
問題の一覧は 100 件で打ち切ります。4000 段を超える入れ子はブラウザーを落とさずメッセージで検証を止め、循環した #/ 参照は無限に追わず報告します。
パターンと format はブラウザーの正規表現エンジンを使います。配列 2 万件やオブジェクトのプロパティ 2 万件は約 20 ms で検証できます。