DevToolPal
日本語

JSON Schema バリデーター

JSON データを JSON Schema(2020-12、2019-09、Draft-07、Draft-04)で検証し、すべてのエラーをパス付きで表示します。

ローカルで処理、アップロードなし

オプション

JSON データ

JSON Schema

検証結果

結果はここに表示されます

機能

JSON Schema は JSON データの形を記述するための仕様です。オブジェクトに必要なプロパティ、各値の型、許可される範囲やパターン、配列の長さなどを定義できます。API の OpenAPI 仕様書、設定ファイルの入力補完を行うエディター、不正なリクエストをはじくバックエンドなどで使われています。

このバリデーターは JSON ドキュメントをスキーマで検証し、見つかった問題をすべて一覧表示します。各エラーには、データ内の位置(/tags/1 のような JSON Pointer)、わかりやすいメッセージ、失敗したスキーマのキーワードが表示されるので、データやスキーマをすばやく修正できます。2020-12、2019-09、Draft-07、Draft-04 に対応し、$ref、$defs、allOf/anyOf/oneOf、if/then/else、unevaluatedProperties、フォーマット検証も扱えます。

使い方

  1. JSON データ にデータを、JSON Schema にスキーマを貼り付けるか、それぞれファイルをアップロードします。サンプル を押すと、わざと誤りを含めたユーザーレコードが読み込まれます。
  2. 結果は入力に合わせて更新されます。データが有効なら緑のバッジ、そうでなければエラー数とエラー一覧が表示されます。
  3. ドラフト を自動のままにすると $schema に従います。バージョンを固定することもできます。すべてのエラーを表示 をオフにすると最初のエラーで止まります。
  4. エラーをコピー で一覧をテキストとしてコピーでき、バグ報告やコードレビューに貼り付けられます。

どちらかが正しい JSON でない場合は、データとスキーマのどちらが壊れているかと、その行・列が表示されます。

例

次のスキーマで:

{
  "type": "object",
  "required": ["id"],
  "properties": {
    "id": { "type": "integer" },
    "age": { "type": "integer", "minimum": 0 }
  }
}

ドキュメント {"age": -1} を検証すると 2 件のエラーになります。(ルート)では必須プロパティ id がなく、/age では値が最小値 0 を下回っています。

ヒント

"additionalProperties": false を追加すると、スペルミスしたプロパティ名を検出できます(追加しないと黙って通ってしまいます)。固定値には enum や const、製品コードのような文字列には pattern を使いましょう。スキーマが大きくなったら、繰り返し使う部分を $defs に移して $ref で参照します。

よくある質問

› どの JSON Schema バージョンに対応していますか?

2020-12、2019-09、Draft-07(Draft-06 も含む)、Draft-04 に対応しています。「ドラフト」を自動にすると、スキーマの $schema キーワードからバージョンを判断します。$schema がないスキーマは 2020-12 として扱います。

› エラーのパスは何を意味しますか?

最初のパスは、データ内で検証に失敗した値を指す JSON Pointer です(例:/items/2/price)。「(ルート)」はドキュメント全体を表します。灰色の行は失敗したキーワードとスキーマ内の位置です(例:minimum · #/properties/age/minimum)。

› email や date-time などのフォーマットも検証されますか?

はい。date、time、date-time、duration、email、hostname、ipv4、ipv6、uri、uri-reference、uuid、regex、json-pointer など、一般的なフォーマットを検証します。未知のフォーマットは仕様どおり無視されます。

› スキーマから別のファイルを参照できますか?

同じスキーマ内の参照(例:#/$defs/address への $ref)は使えます。データはブラウザーの外に出ないため、外部 URL はダウンロードされません。参照先の定義は $defs に貼り付けてください。