機能
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、フォーマット検証も扱えます。
使い方
- JSON データ にデータを、JSON Schema にスキーマを貼り付けるか、それぞれファイルをアップロードします。サンプル を押すと、わざと誤りを含めたユーザーレコードが読み込まれます。
- 結果は入力に合わせて更新されます。データが有効なら緑のバッジ、そうでなければエラー数とエラー一覧が表示されます。
- ドラフト を自動のままにすると
$schemaに従います。バージョンを固定することもできます。すべてのエラーを表示 をオフにすると最初のエラーで止まります。 - エラーをコピー で一覧をテキストとしてコピーでき、バグ報告やコードレビューに貼り付けられます。
どちらかが正しい 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 に貼り付けてください。