Вы на правильном пути с anyOf
. Что вы должны сделать, зависит от сходства между объектом (словарем), который сам по себе, и объектом, который находится в массиве. Они выглядят по-разному в вашем примере, поэтому я отвечу тем же, а затем покажу, как упростить вещи, если они на самом деле одинаковы.
Чтобы использовать anyOf
, вы хотите захватить ключевые словакоторые определяют ваш словарь
{
"type": "object",
"properties": {
"id": { "type": "string"},
"name": { "type": "string"}
},
"required": ["id"]
}
и переносят его в anyOf
прямо на корневом уровне схемы
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Update",
"anyOf": [
{
"type": "object",
"properties": {
"id": { "type": "string"},
"name": { "type": "string"}
},
"required": ["id"]
}
]
}
Чтобы написать схему для массива объекта того же типа, вам нужно ключевое слово items
.
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "string"},
"Family": { "type": "string"}
},
"required": ["id"]
}
}
Добавьте его в качестве второго элемента в массиве anyOf
, и вы получите золотой.
Если ваш одинокий объект может иметь ту же схему, что и ваш объект элемента массива, то вы можете написать эту схему один раз в качестве определения и ссылаться на нее в обоих местах.
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Update",
"definitions": {
"myObject": {
"type": "object",
"properties": {
"id": { "type": "string"},
"name": { "type": "string"}
},
"required": ["id"]
}
},
"anyOf": [
{ "$ref": "#/definitions/myObject" },
{
"type": "array",
"items": { "$ref": "#/definitions/myObject" }
}
]
}