anyOf — 複数スキーマのいずれかに一致
JSON Schemaの anyOf キーワードで、複数のスキーマのうち少なくとも1つに一致するバリデーションを定義する方法を解説します。
Composition
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"contact": {
"anyOf": [
{
"type": "object",
"properties": {
"email": { "type": "string", "format": "email" }
},
"required": ["email"]
},
{
"type": "object",
"properties": {
"phone": { "type": "string", "pattern": "^\\+[1-9]\\d{6,14}$" }
},
"required": ["phone"]
}
]
},
"identifier": {
"anyOf": [
{ "type": "string", "format": "email" },
{ "type": "string", "pattern": "^[a-zA-Z0-9_]{3,30}$" },
{ "type": "integer", "minimum": 1 }
]
}
},
"required": ["contact"]
}Test Data
{
"contact": {
"email": "alice@example.com",
"phone": "+14155551234"
},
"identifier": "alice_dev"
}詳細な説明
JSON Schemaの anyOf キーワードは、指定した複数のスキーマのうち少なくとも1つに値が一致すればバリデーションが成功する論理OR条件を定義します。
基本構文:
{
"anyOf": [
{ "type": "string" },
{ "type": "integer" }
]
}
このスキーマは文字列または整数を受け入れます。
oneOf との違い:
anyOf: 1つ以上のスキーマに一致すればOK(複数のスキーマに同時に一致しても有効)oneOf: 正確に1つのスキーマにのみ一致する必要がある
anyOf は oneOf よりも寛容で、パフォーマンスも良い傾向があります。厳密な排他性が不要な場合は anyOf を優先的に使用することが推奨されます。ユニオン型やnullable型の定義によく使用されます。
ユースケース
複数の型を許容するフィールド、異なるフォーマットのデータ入力、バージョン間の互換性対応などで使用します。