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 приведет к сбою проверки.

Другие вопросы по тегам