JSonschema проверить по ключам с другим именем или типом - PullRequest
0 голосов
/ 03 января 2019

Я в переходе от этого типа 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 Ответ

0 голосов
/ 03 января 2019

Вы захотите изменить anyOf на oneOf (это ничего не изменит с вашей текущей схемой, но сделает намерение более ясным) и добавьте additionalProperties: false к каждой из подсхем.

С вашей схемой "item_number": "4" не проходит проверку для anyOf [0], но проходит для anyOf [1], потому что нет ограничения для item_number или свойства не определены.

additionalProperties: false означает, что любойсвойство, не включенное в качестве ключа в properties, приведет к сбою проверки.

...