oneOf、anyOf、allOf — JSON Schemaのスキーマ合成

JSON Schemaの合成キーワード oneOf、anyOf、allOf をマスターしましょう。多相データに対して複数のサブスキーマに対するバリデーションを行う柔軟なスキーマを構築します。

Advanced Patterns

詳細な説明

スキーマ合成キーワード

JSON Schemaは、複数のサブスキーマを柔軟なバリデーションルールに組み合わせる3つの合成キーワード — oneOfanyOfallOf — を提供します。

anyOf — 少なくとも1つに一致

値はリストされたサブスキーマの1つ以上に対してバリデーションに合格する必要があります:

{
  "payment": {
    "anyOf": [
      {
        "type": "object",
        "properties": { "cardNumber": { "type": "string" } },
        "required": ["cardNumber"]
      },
      {
        "type": "object",
        "properties": { "bankAccount": { "type": "string" } },
        "required": ["bankAccount"]
      }
    ]
  }
}

oneOf — 正確に1つに一致

値はリストされたサブスキーマの正確に1つに対してバリデーションに合格する必要があります。const ディスクリミネーターにより各分岐が相互排他的になります。

allOf — すべてのサブスキーマに一致

値はリストされたすべてのサブスキーマに対してバリデーションに合格する必要があります。これは $ref と組み合わせて基本スキーマを追加プロパティで拡張するために一般的に使用されます。

適切なキーワードの選択

キーワード セマンティクス 典型的なユースケース
anyOf 少なくとも1つが一致 柔軟なユニオン、nullable型
oneOf 正確に1つが一致 判別ユニオン、多相型
allOf すべてが一致 スキーマ継承、ミックスイン

ジェネレーターの動作

ジェネレーターは通常、単一のサンプルから合成キーワードを生成しません。これらのキーワードは手動で追加するか、異なる形状を持つ複数のサンプルから生成されます。

ユースケース

タイプに基づいて異なる形状を持つ多相APIレスポンス、支払い方法の選択、多様なペイロードを持つイベントシステム、またはロール固有のフィールドで基本スキーマを拡張する場合に合成キーワードを使用します。

試してみる — JSON Schema Generator

フルツールを開く