Как включить параметр множественного типа Jsonschema в enum? - PullRequest
0 голосов
/ 29 октября 2018

По приведенному ниже примеру вопрос станет более понятным:

data = {"type": "object", "properties": {"product": {"type": ["boolean","string"]}}}

Включает типы boolean и string. Это работает, но я хочу ограничить строковую часть списком enums:

["off", "on", "semi-on"]

Когда type не является list, оно работает, но когда я создаю его в виде списка, я не могу предоставить enum для типа string.

Пример ниже без boolean тоже работает:

data = {"type": "object", "properties": {"product": {"type": "string", "enum": ["off", "on", "semi-on"]}}}

Следует разделить схему или есть другой способ для этого?


РЕДАКТИРОВАТЬ-1: Реальная схема выглядит следующим образом:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "is_trusted": {"type": "boolean"},
        "is_active": {"type": "boolean"},
        "addresses": {"type": "array"},
        "attachments": {
            "type": "object",
            "properties": {
                "send_web_push": {"type": "boolean"},
                "receive_web_push": {"type": "boolean"}
            },
            "required": ["send_web_push", "receive_web_push"],
            "additionalProperties": false
        }
    },
    "required": ["is_trusted", "is_active", "addresses"],
    "additionalProperties": false
}

1 Ответ

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

Схема JSON определяет ключевые слова валидации в зависимости от того, как они будут применяться к экземпляру.

enum находится в разделе Ключевые слова проверки для любого типа экземпляра .

Это означает, что он применим к любому типу экземпляра, включая логические значения.

Таким образом, вы должны включить логические значения true и false в список допустимых значений. (Это делает type избыточным в этом примере).

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "product": {
      "type": [
        "boolean",
        "string"
      ],
      "enum": [
        "off",
        "on",
        "semi-on",
        true,
        false
      ]
    }
  }
}

Нижеследующий экземпляр теперь действителен для вышеуказанной схемы. В вашей первой схеме product со значением true завершится неудачей enum проверка, потому что true не входит в перечисление.

{
  "product": true
}
...