JSON をスキーマで検証し、サンプルから下書きを作る

スキーマとデータを貼り付けると一致しない箇所が分かります。「データからスキーマを生成」はサンプルから下書きを作り、その下書きがサンプルを通過することを確かめます。送信はありません。

ブラウザ内でローカルに実行
JSON Schema

JSON Schema オブジェクトを使用します。#/ で始まる参照はこのページ内で解決します。

JSON データ

検証するデータを貼り付けるか、代表的なサンプルを貼り付けて初期スキーマを生成します。

検証結果
JSON Schema と JSON データを入力し、次を選択 JSON を検証.

このローカル検証ツールに含まれるチェック

検証が読むのは 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 をスキーマで検証する方法

JSON Schema と JSON 文書を貼り付けると、データがスキーマに反する箇所がすべて分かります。検証はこのタブ内で実行されるため送信は一切なく、ネットワークを切っても動作します。

生成は逆方向の処理です。貼り付けたサンプルを読み、配列の要素はすべての項目をまとめて、required はどのオブジェクトにもあるキーだけにして下書きスキーマを書き、その下書きでサンプルを検証します。自分のサンプルを説明できない下書きは、黙って残さず報告します。

  1. スキーマを JSON Schema 欄に、文書を JSON データ欄に貼り付けます。#/$defs/address のようなローカル参照は追跡し、別ファイルを指す参照はここでは未対応として報告します。
  2. 「JSON を検証」を押します。問題は見つかった位置(例: $.users[2].email)と、破った規則とともに一覧表示されます。一覧は 100 件で打ち切られ、その旨が表示されます。
  3. 「データからスキーマを生成」を押すとサンプルから下書きを作ります。下書きはスキーマ欄の内容を置き換え、その直後にサンプルを下書きで検証します。
  4. 「スキーマをコピー」はスキーマ欄をコピーし、「サンプルを読み込む」は通る小さな API ペイロードで両方の欄を埋め、「クリア」は両方の欄と結果を空にします。結果のあとに入力を変えると、古い判定は薄く表示され、再実行を促します。

検証が読むもの、読まないもの

検証が読むキーワード

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 で検証できます。

最近使ったツール: