Зависимости схемы JSON: содержимое перечисления зависит от выбора другого перечисления - PullRequest
0 голосов
/ 08 мая 2018

У меня есть enum с первым набором вариантов и вторым enum, содержание которого зависит от выбора, сделанного в первом enum.

Вот простой пример того, что у меня есть в настоящее время (не верно):

"fontGroup": {
    "title": "Font Group",
    "type": "string",
    "enum": [
        "Roboto",
        "Noto",
        "Alegreya"
    ],
    "default": "Roboto"
},
"fontFamily": {
    "title": "Font Family",
    "type": "string",
    "enum": [
        "Roboto Slab",
        "Roboto Condensed",
        "---",
        "Noto Sans",
        "Noto Serif",
        "---",
        "Alegreya SC",
        "Alegreya Sans"
    ],
    "default": "Roboto Slab"
}

Конечно, если Noto выбрано из первого enum, то допустимы только связанные Noto варианты во втором enum. Недопустимо выбирать Noto в сочетании с Roboto Condensed, например.

Как это можно указать в схеме?

1 Ответ

0 голосов
/ 14 мая 2018

Вы не можете ссылаться на относительное свойство с draft-07 и ниже, но вы можете перечислить все возможные варианты объекта:

{
  "type": "object",
  "oneOf": [
    {
      "properties": {
        "fontGroup": {
          "const": "Roboto"
        },
        "fontFamily": {
          "enum": [
            "Roboto Slab",
            "Roboto Condenced"
          ]
        }
      }
    },
    {
      "properties": {
        "fontGroup": {
          "const": "Noto"
        },
        "fontFamily": {
          "enum": [
            "Noto Sans",
            "Noto Serif"
          ]
        }
      }
    },
    {
      "properties": {
        "fontGroup": {
          "const": "Alegreya"
        },
        "fontFamily": {
          "enum": [
            "Alegreya SC",
            "Alegreya Sans"
          ]
        }
      }
    }
  ]
}

const ключевое слово недоступно в draft-04, вы можете изменить его на однозначное перечисление: "enum":["Roboto"].

...