Как переключить регистр полей в схеме JSON? - PullRequest
0 голосов
/ 22 октября 2018

Я использую Python jsonschema для проверки записей JSON.Вот пример схемы.Здесь есть только два случая, но представьте себе аналогичный сценарий, в котором вместо этого выложены сотни случаев, подобных этим.

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "oneOf": [
      {
        "type": "object",
        "required": ["a", "b", "c"],
        "properties": {
          "a": {"type": "integer", "enum": [0]},
          "b": {"type": "integer", "enum": [0, 2, 4, 6, 8]},
          "c": {"type": "string", "enum": ["always the same"]}
        }
      },
      {
        "type": "object",
        "required": ["a", "b", "c"],
        "properties": {
          "a": {"type": "integer", "enum": [1]},
          "b": {"type": "integer", "enum": [1, 3, 5, 7, 9]},
          "c": {"type": "string", "enum": ["always the same"]}
        }
      }
    ]
}

Ключевой вопрос - дублирование поля "c".Я хотел бы иметь возможность переключить регистр на "a", проверяя на соответствующий "b", но имея "c" всегда остаются неизменными.Я не хочу произносить "c" сто раз.Можно ли это сделать?

Спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Да, это можно сделать.На самом деле, хорошей практикой является вставка anyOf / oneOf частей, которые меняются.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "c": { "const": "always the same" }
  },
  "required": ["a", "b", "c"],
  "anyOf": [
    {
      "properties": {
        "a": { "const": 0 },
        "b": { "enum": [0, 2, 4, 6, 8] }
      }
    },
    {
      "properties": {
        "a": { "const": 1 },
        "b": { "enum": [1, 3, 5, 7, 9] }
      }
    }
  ]
}
...