У меня есть ответ JSON, как показано ниже ..
[{
"views": [{
"groups": [{
"type": "static",
"tiles": [{
"context": "event",
"collection": "selo",
"tile_type": "static"
}
]
}
]
}, {
"groups": [{
"type": "static",
"tiles": [{
"context": "event",
"collection": "nitic",
"tile_type": "static"
}
]
}
]
}, {
"groups": [{
"type": "scrollable",
"tiles": [{
"name": "loca",
"location": "cal",
"tile_type": "person"
}, {
"name": "tom",
"location": "toc",
"tile_type": "person"
}
]
}
]
}
]
}
]
Здесь я должен проверить tile
объекты внутри каждого group
массива. На основе ключа type
в объекте group
размер и ключевые элементы в tile
объект меняется. Например, если ключ type
равен static
, размер объекта tile
равен 1
, а если это значение равно scrollable
, он содержит более одного
tile
предметов. В дополнение к этому tile
elemnts также отличается.
для static
плитки Я должен проверить наличие следующих ключевых элементов
"context"
"collection"
"tile_type"
для scrollable
плитки Я должен проверить наличие следующих ключевых элементов
"name"
"location"
"tile_type"
Исходя из этого, я определил схему с помощью переключателя, подобного этому, и проверка схемы не работает. Вместо ключевого слова switch
я также пытался использовать anyOf
(я использую версию draft7)
определение схемы
"switch": [
{
"if": {
"properties": {
"tile_type": {
"enum": [
"static"
]
}
},
"required": [
"context",
"collection",
"tile_type"
]
}
},
{
"if": {
"properties": {
"tile_type": {
"enum": [
"person"
]
}
},
"required": [
"name",
"location",
"tile_type"
]
}
}
]
Пробовал с anyOF
"anyOf": [{
"properties": {
"tile_type": {
"enum": [
"static"
]
}
},
"required": [
"context",
"collection",
"tile_type"
]
}, {
"properties": {
"tile_type": {
"enum": [
"person"
]
}
},
"required": [
"name",
"location",
"tile_type"
]
}
]
Ошибки, обнаруженные при использовании anyOf
Found 2 error(s)
Message:
Required properties are missing from object: context, collection.
Schema path:
http://example.com/root.json#/views/groups/tiles/items/required
Message:
Required properties are missing from object: context, collection.
Schema path:
http://example.com/root.json#/views/groups/tiles/items/required
Попробовал в: https://www.jsonschemavalidator.net/
Есть ли решение для этого?
Обновленная часть идет ниже
В ответе иногда некоторые данные tile
содержат ключи errorText
и errorCode
.
[{
"views": [{
"groups": [{
"type": "static",
"tiles": [{
"context": "event",
"tile_type": "static"
}
]
}
]
}, {
"groups": [{
"type": "static",
"tiles": [{
"context": "event",
"collection": "nitic",
"tile_type": "static"
}
]
}
]
}, {
"groups": [{
"type": "scrollable",
"tiles": [{
"name": "loca",
"location": "cal",
"tile_type": "person"
}, {
"errorText":"Tile failure",
"errorCode":1,
"tile_type": "person"
},
{
"errorText":"Tile not generated",
"errorCode":2,
"tile_type": "person"
}
]
}
]
}
]
}
]
В таком случае я добавил дополнительные свойства в существующий массив oneOf
следующим образом.
Но это не работает. Что не так с моим определением схемы
{
"properties": {
"type": {
"const": "scrollable"
},
"tiles": {
"type": "array",
"minItems": 2,
"items": {
"properties": {
"errorText": {
"const": ["Tile failure", "Tile not generated"]
}
},
"required": [
"errorText",
"errorCode",
"tile_type"
]
}
}
}
}
сообщение об ошибке при проверке схемы:
Message:
Value "static" does not match const.
Schema path:
#/items/properties/views/items/properties/groups/items/oneOf/2/properties/type/const
Message:
Value "static" does not match const.
Schema path:
#/items/properties/views/items/properties/groups/items/oneOf/1/properties/type/const