JSONスキーマバリデーター

スキーマとドキュメントを貼り付けてドラフトを選択すると、バリデーターがスキーマで使用しているすべてのキーワード(type、required、enum、oneOf、$ref、if/then/else、カスタムのformat)に照らしてドキュメントを検証し、違反ごとに問題箇所を正確に指し示すJSONPath形式のポインタとともに報告します。

スキーマに対して検証する方法

  1. 1

    スキーマを貼り付ける

    JSONスキーマのドラフト04、07または2020-12。`$schema`キーワード(存在する場合)が該当するドラフトを自動的に選択します。

  2. 2

    ドキュメントを貼り付ける

    検証したいJSONです。まず有効なJSONである必要があり、構文エラーはスキーマ評価の前に表示されます。

  3. 3

    検証する

    各違反は、JSONポインタ(`/user/email`)と失敗したキーワード(`format`、`required`など)とともに報告されます。

  4. 4

    修正して再検証する

    どちらかを編集すると、ステータスがリアルタイムで更新されます。

サポートされているキーワード

コア: type、enum、const、multipleOf、maximum、minimum、exclusiveMaximum、exclusiveMinimum、maxLength、minLength、pattern、maxItems、minItems、uniqueItems、maxContains、minContains、maxProperties、minProperties、required、dependentRequired。

組み合わせ: allOf、anyOf、oneOf、not。

適用キーワード: properties、patternProperties、additionalProperties、items、prefixItems、contains、propertyNames。

条件分岐: if、then、else、dependentSchemas。

参照: $ref、$defs、$id、$anchor。

フォーマット(有効にすると検証を実施): date-time、date、time、duration、email、hostname、ipv4、ipv6、uri、uuid、regex。

エラー出力

FAIL  /user/email        format            "not-an-email" is not a valid "email"
FAIL  /user/age          minimum           -3 is less than the minimum 0
FAIL  /orders/0/total    type              "42" is not of type "number"
FAIL  /                  required          missing required property "shippingAddress"

すべてのエラーには失敗したパスとキーワードが含まれるため、エディタ内ですばやく特定できます。

落とし穴になりやすいドラフト間の違い

キーワード ドラフト04 ドラフト07 ドラフト2020-12
id と $id id $id $id
exclusiveMaximum をブール値として はい 数値 数値
items の配列構文 items items prefixItems
$ref が兄弟キーワードを許可 いいえ いいえ はい

正しいドラフトを設定してください。ドラフト04のスキーマを2020-12として検証すると、idやその他の細かな点が誤って解釈されます。

典型的なワークフロー

  • API契約テスト: デプロイ前に、生成または更新したOpenAPIスキーマを実際のサンプルレスポンスに照らして実行します。
  • 設定の堅牢化: マージ前に、CIですべてのYAML/JSON設定をスキーマに照らして検証します。
  • データ取り込み: 期待する形に合致しないペイロードを、明確なエラーメッセージとともに早い段階で拒否します。

よくある間違い

  • formatの適用を忘れる。 デフォルトでは、ほとんどのバリデーターは未知のフォーマットを注釈としてのみ扱います。不正なメールアドレスや日付を実際に拒否するには、厳格なフォーマット検証を有効にしてください。
  • oneOfの使いすぎ。 oneOfの2つの分岐が重なると、ドキュメントは失敗します(ちょうど1つだけに一致する必要があります)。anyOfまたはディスクリミネーターのパターンを使用してください。
  • additionalProperties: falseによる厳格すぎるスキーマ。 新しい任意フィールドを追加することが互換性を壊す変更になってしまいます。本当に閉じたオブジェクトが必要な場合を除き、指定しないでください。

よくある質問

はい。ドラフト2020-12、07、04のすべてに対応しています。バリデーターはドキュメントの$schemaキーワードを読み取って適切なものを選択するか、UIのセレクターにフォールバックします。

標準フォーマット(email、date-time、uuid、ipv4など)は、厳格なフォーマット検証が有効な場合に検証されます。スキーマで宣言したカスタムフォーマットは、patternで正規表現を指定しない限り、注釈としてのみ扱われます。

内部参照(#/$defs/foo)は自動的に解決されます。外部のHTTP参照は、セキュリティ上の理由からデフォルトでは取得されません。まず外部参照をインライン化するか、リモートの$ref解決に対応した専用ツールを使用してください。

はい。スキーマもドキュメントもローカルに保持されます。貼り付けた内容がアップロードされることは一切なく、社内APIの契約や機密データにも安全です。

関連ツール

このツールは他の言語でも利用できます