JSON и схемы
Композиция в JSON Schema: разница между oneOf, anyOf и allOf
oneOf требует совпадения ровно с одной подсхемой, anyOf — как минимум с одной, а allOf — со всеми перечисленными подсхемами одновременно.
Опубликовано
Сравнение oneOf, anyOf и allOf
| Ключевое слово | Требуемое совпадение | Типичный сценарий |
|---|---|---|
| oneOf | Ровно одна подсхема | Взаимоисключающие структуры (дискриминатор) |
| anyOf | Хотя бы одна подсхема | Допускается совпадение с несколькими формами |
| allOf | Все подсхемы одновременно | Пересечение и объединение ограничений |
Проверьте пример
Проверьте ровно один вариант контакта
Дискриминаторы const позволяют различить ветви email и phone.
oneOf: EmailContact | PhoneContactОжидаемый результат: Объект email соответствует ровно одной ветви.
Проверьте пример
Разрешите пересекающиеся ветви anyOf
Положительное целое число удовлетворяет ограничениям number и integer и остаётся корректным для anyOf.
anyOf: [number >= 0, integer]Ожидаемый результат: Значение 4 корректно, хотя соответствует обеим ветвям.
Генератор схем
Построение сложных схем
Сгенерируйте общую структуру и добавьте правила композиции.