JSON Schema Array должен содержать определенную строку - PullRequest
0 голосов
/ 01 марта 2019

Есть несколько вопросов по этому вопросу, но ни один из них, похоже, не решает эту конкретную проблему, равно как и документация по JSON Schema, поэтому, возможно, это невозможно сделать.

Проблема в том, что у меня есть массивкоторые могут иметь любую из 4 строк в качестве значений, что достаточно просто сделать с помощью этой схемы:

...
 "attributes": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [   
          "controls",
          "autoplay",
          "muted",
          "loop"
        ]
      },
      "additionalItems": false
    }
...

Таким образом, значения в массиве могут быть только одной из этих четырех.Тем не менее, «элементы управления» всегда должны быть частью массива, в то время как остальные три являются необязательными.Если бы это был массив объектов, мы могли бы сделать это обязательным, но я не уверен, как проверить массив, имеющий определенное значение.

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете использовать ключевое слово contains:

"attributes": {
  "type": "array",
  "items": {
    "type": "string",
    "enum": [   
      "controls",
      "autoplay",
      "muted",
      "loop"
    ]
  },
  "contains": {
    "const": "controls"
  },
  "additionalItems": false
}

Из спецификации:

6.4.6.содержит

Значение этого ключевого слова ДОЛЖНО быть действительной схемой JSON.

Экземпляр массива действителен в отношении "содержит", если хотя бы один из его элементов является допустимым в отношении данной схемы.

...