схема json для проверки массива объектов с требованиями anyOf и oneOf
Я пытаюсь определить схему json для ограничения свойств объектов, находящихся в массиве.
то, что у меня есть до сих пор:
{
"title":"myCollection",
"properties":{
"things":{
"type":"array",
"items":[{
"title":"thingObj",
"type":"object",
"properties":{
"name":{
"type":"string"
},
"code":{
"type":"string"
},
"type":{
"type":"string",
"enum":["dog","cat"]
},
"rate":{
"type":"number"
},
"value":{
"type":"number"
}
},
"anyOf":[{
"properties":{
"name":{
"type":"string"
}
},"required":["name"]
},{
"properties":{
"code":{
"type":"string"
}
},"required":["code"]
},{
"properties":{
"type":{
"type":"string",
"enum":["new","existing"]
}
},"required":["type"]
}],
"oneOf":[{
"properties":{
"rate":{
"type":"number"
}
},
"required":["rate"]
},{
"properties":{
"value":{
"type":"number"
}
},
"required":["value"]
}],
"additionalProperties":false
}]
}
}
}
теперь дано следующее jsonobj:
{
"things": [
{
"name": "tabby",
"code": "meeow",
"type": "cat",
"value": 20
},
{
"name": "k9",
"code": "woofer",
"type": "dog",
"rate": 15
}
]
}
этой JSON schema validator предоставляет допустимый ответ, но эта проверка применяется только к первому элементу в массиве. Если удалить все поля, включенные в предложение anyOf или предложение oneOf первого элемента, то проверка неудачи. То же самое со вторым элементом массива не вызывает желаемого сбоя. Как я могу гарантировать, что проверка выполняется для каждого члена массива?
1 ответов
это потому, что вы (случайно) использовали "tuple typing". Это включено, когда значение "items"
является массивом, и он соответствует схемам конкретные должности в массиве.
Если вы измените "items"
(в вашей схеме), чтобы быть просто схемой (а не массив схем), то он будет проверять все элементы одинаково.