Моя полезная нагрузка JSON содержит два атрибута home_number
, home_name
и , по крайней мере один атрибут всегда требуется .Кроме того, эти атрибуты имеют следующие дополнительные ограничения:
home_number: тип: строка, максимальная длина: 4
home_name: тип: строка, максимальная длина: 50
Схема JSON должна выдавать ошибку , если оба атрибута не удовлетворяют требованиям .
например:
действительный JSON
{
"home_number": "1234", // valid
}
действительный JSON
{
"home_number": null, // invalid
"home_name": "test_home_name" // valid
}
недействительный JSON
{
"home_number": "12345", // invalid
"home_name": null // invalid
}
Я пыталсяследующая схема JSON с draft-07
версией, использующей если, тогда ключевые слова.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"address": {
"$ref": "#/definitions/address",
"properties": {
"house_number": {
"$ref": "#/definitions/address/house_number"
},
"house_name": {
"$ref": "#/definitions/address/house_name"
},
"post_code": {
"$ref": "#/definitions/address/postcode"
}
}
}
},
"required": [
"address"
],
"definitions": {
"address": {
"type": "object",
"properties": {
"postcode": {
"type": "string",
"maxLength": 6
}
},
"anyOf": [
{
"required": [
"house_number"
]
},
{
"required": [
"house_name"
]
}
],
"if": {
"properties": {
"house_name": {
"not": {
"type": "string",
"maxLength": 50
}
}
}
},
"then": {
"properties": {
"house_number": {
"type": "string",
"maxLength": 4
}
}
},
"required": [
"postcode"
]
}
}
}
Мой вопрос, есть ли другой / лучший подход для достижения этой цели с использованием draft-04
версии без использования draft-07
если тогда ключевые слова?