jsonschema проверяется ключами с другим именем или типом
Я в переходе от этого типа jsons:
{
"id": 1,
"data": {
"item_number": "4",
...
}
}
в
{
"id": 1,
"data": {
"itemNumbers": [4],
...
}
}
и мне нужна jsonschema, которая соответствует обоим этим jsons.
И вот это:
{
"properties": {
"id": {
"enum": [
1
]
},
"data": {
"anyOf": [
{
"properties": {
"item_number": {
"enum": [
"4"
]
}
}
},
{
"properties": {
"itemNumbers": {
"contains": {
"enum": [
4
]
}
}
}
}
]
}
},
"required": [
"id"
]
}
Используя пакет python jsonschema, он соответствует всем jsons независимо от номера элемента.
Любая помощь приветствуется.
1 ответ
Вы хотите изменить свой anyOf
в oneOf
(Это ничего не изменит с вашей текущей схемой, но сделает намерение более ясным) и добавьте additionalProperties: false
каждой из подсхем.
С вашей схемой, "item_number": "4"
не проходит проверку для anyOf[0], но проходит для anyOf[1], потому что нет ограничений для item_number
или свойства не определены.
additionalProperties: false
означает, что любое свойство не включено в качестве ключа в properties
приведет к сбою проверки.