本文へスキップ

JSON Schema検証

JSON Schema Validator

文書をJSON Schemaで検証し、通らなかった箇所をインスタンスのパスとともに挙げます。

JSONの文書をJSON Schemaのdraft 2020-12で検証します。すべてブラウザの中で動きます。公式のJSON-Schema-Test-Suiteの必須テスト1,299件をすべて通っていて、失敗はインスタンスの位置と、それを出したキーワードとともに報告します。

🔒 ブラウザの中だけで動きますjson-schemavalidatejson

スキーマ(draft 2020-12)

検証するデータ

結果

判定

妥当でない

失敗の件数

3

インスタンスの位置キーワード問題
/portmaximum65535 以下でなければなりません
/tagsuniqueItems0番と 1番の要素が同じです
/debugfalseここではどんな値も通りません(スキーマが false です)
検証はすべてこのタブの中で JSON Schema draft 2020-12 に対して走り、公式の JSON-Schema-Test-Suite の必須テスト 1,299 件をすべて通ります。 $ref はスキーマ自身、貼り付けられた追加文書、同梱の 2020-12 メタスキーマの中だけで解決します。リモート参照は取りに行かずに断るので、結果がネットワークに左右されることはありません。 format は強制せず注釈として報告します。2020-12 の既定の動作です。

使い方

  1. スキーマとデータを貼り付けます

    どちらの欄も、入力に合わせて検証をやり直します。どちらかの構文エラーは別々に報告するので、どちら側が壊れているのかが分かります。

  2. `$ref`があるなら、参照される文書を足します

    追加のスキーマを有効にして貼り付けます。文書1つでも、それぞれに`$id`の付いた配列でも構いません。ネットワークから取りに行かないので、ファイルが複数に分かれたスキーマもここで検証できます。

  3. 失敗の表を読みます

    行ごとに、インスタンスの経路、失敗したキーワード、何を期待していたのかが出ます。issueに貼り付けるなら、全体をJSONとしてコピーできます。

よくある質問

`"format": "email"`が強制されないのはなぜですか

2020-12では`format`が既定で注釈だからです。検証器は、それを報告するだけで検査しないことが許されていて、ほとんどがまさにそうしています。強制したいなら`pattern`を使うか、format-assertionの語彙を有効にした検証器を使ってください。

リモートの`$ref`が解決できませんでした

リモートの参照は、取りに行かずに拒否します。ネットワークへ出ていく検証器は、結果がDNSと他人の稼働率に左右されますし、どのスキーマを検証しているのかを相手に教えることになります。参照される文書を、追加のスキーマの欄に貼り付けてください。

どのdraftに対応していますか

2020-12です。Draft-07のスキーマもたいていはそのまま通ります。キーワードのほとんどが変わっていないからです。ただし`definitions`は`$defs`ではありませんし、タプルにおける`items`の意味が違いますし、`$recursiveRef`は無くなりました。決めてかかる前に`$schema`の行を確かめてください。

フィールド1つが違うだけなのに、エラーがこんなに多いのはなぜですか

`anyOf`、`oneOf`、`allOf`の中で失敗すると、失敗した枝をすべて報告するからです。仕様が、出力の単位にそう含めるよう定めています。ふつうは最初の行が求めているもので、残りは、ほかの枝もなぜ合わなかったのかを説明しています。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。