ヘルプ

JSON Schema 検証: エラーをパスと理由つきで確認

スキーマと JSON データを貼り付けると、JSON Schema 検証の結果がすぐに表示されます。一致しない場合は、失敗した値までのパスと分かりやすい理由が、エラーごとに $.users[0].email のように並びます。draft-07、2019-09、2020-12 に対応しており、2つの入力欄の内容はお使いの端末から出ません。


JSON スキーマチェックの手順

  1. JSON スキーマの入力欄にスキーマを貼り付けます(欄には「ここに JSON スキーマを貼り付けてください...」と表示されています)。
  2. JSON データの入力欄に、チェックするデータを貼り付けます。
  3. 結果を読みます。貼り付けた直後、または入力をやめて約 300 ミリ秒後に更新されるので、押すボタンはありません。
  4. 緑の有効と「JSON データはスキーマに一致しています。」が出れば、データは合格です。赤い「無効: エラー 3 件」が出た場合は、失敗した箇所が1件ずつ一覧に並びます。
  5. データ(またはスキーマ)を直すと、編集に合わせて結果が変わります。

2つの欄がそろうまでは、結果に「スキーマと JSON データを貼り付けると、チェックします。」と表示されます。どちらかの欄に JSON ではないテキストが入っていると、赤いJSON が正しくありませんの枠に理由と「X 行目、Y 列目」が表示され、どちらを直すかも結果に出ます。先に乱れた文書を整えたいときは、「JSON整形ツール」が壊れた JSON に対して同じ行と列を示します。

エラーの読み方: パスと理由

エラーはパスと理由の2つでできています。パスはデータのルートである $ から始まり、プロパティ名をドットでつなぎ、配列の位置を 0 から数えて角括弧で示します。例として、スキーマが id を 1 以上の整数、email を email 形式、tags を重複なしと定めていて、データが {"id":"7","email":"ana@","tags":["a","a"]} だとします。結果は「無効: エラー 3 件」になります。

最初の1件だけでなくすべてのエラーが一覧に出るので、文書全体を一度に直せます。100 件を超えると、一覧の最後に「ほかに 250 件のエラーがありますが、表示していません」のような行が付き、見出しの件数は正確なままです。必須プロパティ(required)がない場合、エラーはそのプロパティを持つはずのオブジェクトのパス(たとえば $.users[0])に表示されます。not、contains、propertyNames、dependentRequired、if/then/else のようなあまり使われないキーワードにも、それぞれ分かりやすい理由が用意されています。

厳格モード: additionalproperties false

JSON Schema は初期状態では余分なプロパティを許します。スキーマに載っていない nick という欄がデータにあっても、そのまま合格します。厳格モード(「スキーマに載っていないプロパティがデータにあると、失敗にします。」)をオンにすると、打ち間違いや消し忘れを見つけられます。前の例のスキーマと、データ {"id":1,"email":"ana@example.com","nick":"x"} の場合、モードがオフなら「有効」、オンなら $ で「無効: エラー 1 件」(想定外のプロパティ「nick」です)となります。

スイッチの裏では、ルートのスキーマと、オブジェクトを表すプロパティや要素のスキーマごとに unevaluatedProperties: false が追加されます。$ref をまたいでも働きます。入力欄のテキストが書き換えられることはありません。

JSON Schema draft 7・2019-09・2020-12 のバージョンと $ref

スキーマの "$schema" の行を読み取り、対応するルールでデータをチェックします。http://json-schema.org/draft-07/schema# は draft-07、https://json-schema.org/draft/2019-09/schema は 2019-09、https://json-schema.org/draft/2020-12/schema は 2020-12 として扱います。"$schema" がない場合は 2020-12 です。items に配列を使う古い書き方のときは 2019-09 になります。draft-04、draft-06、そのほかのアドレスには対応しておらず、結果にはスキーマが宣言したアドレスが表示されます。バージョンごとにキーワードが変わっているためです。prefixItems は 2020-12 のもので、definitions は 2019-09 で $defs になりました。参照パスは #/$defs/name と #/definitions/name のどちらの書き方でも使えます。

制限事項とプライバシー


よくある質問

JSON Schema 検証をオンラインで行うには、どうすればいいですか?

「JSON スキーマ」の入力欄にスキーマを、「JSON データ」の入力欄にチェックするデータを貼り付けます。結果は貼り付けた直後、または入力をやめて約 300 ミリ秒後に表示されます。緑の「有効」はデータが一致していることを、赤い「無効」は各エラーのパスと理由を示します。押すボタンはありません。

どの JSON Schema のバージョンに対応していますか。draft-07、2019-09、2020-12 のどれですか?

3つとも対応しています。バージョンはスキーマの「$schema」の行から判断されます。「$schema」のないスキーマは 2020-12 として、items に配列を使う古い書き方のときは 2019-09 としてチェックされます。draft-04、draft-06、そのほかの $schema のアドレスを宣言したスキーマは、非対応として報告されます。

$.users[0].email のようなパスは何を意味しますか?

失敗した値の場所です。$ は JSON データのルート、.users は users というプロパティ、[0] はその配列の最初の要素(数え始めは 0)、.email はその中のプロパティを表します。$.users[2].address.zip のようなパスも、同じように一段ずつ値までたどります。

必須プロパティがないエラーが、なぜ親のオブジェクトに表示されるのですか?

ないプロパティには、指し示す先がないからです。エラーは、そのプロパティを持つはずのオブジェクトのパス(たとえば $.users[0])に、「必須プロパティ「email」がありません。」という理由で表示されます。そのオブジェクトにプロパティを追加すれば、エラーは消えます。

スキーマに余分なプロパティを拒否させるには(additionalproperties false)?

「厳格モード」をオンにします。ルートのスキーマと、オブジェクトを表すプロパティや要素のスキーマごとに unevaluatedProperties: false が追加され、スキーマに載っていないプロパティは「想定外のプロパティ」で失敗します。additionalProperties や unevaluatedProperties をすでに設定しているスキーマは、その設定のままです。

email、date-time、uri、uuid などの形式もチェックされますか?

はい。「format」キーワードはチェックされるので、ana@ のようなアドレスは「format」: 「email」の文字列では失敗し、「形式「email」に一致する必要があります。」と表示されます。email、date、date-time、time、uri、uuid、ipv4、ipv6、hostname など、よく使う形式に対応しています。

$ref で別のファイルや URL を参照できますか?

同じスキーマの中、たとえば #/$defs/name や #/definitions/name だけです。何もダウンロードしないため、https://example.com/address.json のような参照は、スキーマが定義していない参照として報告されます。参照先のスキーマを自分の $defs にコピーして、$ref をそちらに向けてください。

「スキーマ自体が正しくありません」とはどういう意味ですか?

スキーマが JSON Schema の規則に反しています。たとえば「type」: 「strng」や、文字列で書かれた「minimum」などです。結果には、スキーマ内の位置を指すパスつきで問題が並びます。スキーマを直すまで、データはチェックされません。

スキーマや JSON データはどこかにアップロードされますか?

いいえ。スキーマもデータもすべてブラウザ内でチェックされます。アップロードも保存もされず、アカウントも必要ありません。

おすすめ

無料でツールを続ける支えになります。✨

画像はイメージです。 Amazonのアソシエイトとして、Capsule Toolsは適格販売により収入を得ています。