JSON Schema Array 必须包含特定字符串

Asi*_*Rex 3 arrays validation json jsonschema

关于这个主题有几个问题,但它们似乎都没有解决这个特定问题,关于 JSON Schema 的文档也没有,所以可能无法完成。

问题是我有一个数组,可以将 4 个字符串中的任何一个作为值,使用此模式很容易实现:

...
 "attributes": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [   
          "controls",
          "autoplay",
          "muted",
          "loop"
        ]
      },
      "additionalItems": false
    }
...
Run Code Online (Sandbox Code Playgroud)

所以数组中的值只能是这四个值之一。尽管如此,“控件”必须始终是数组的一部分,而其他三个是可选的。如果它是一个对象数组,我们可以将其设为必需,但我不确定如何检查具有特定值的数组。

谢谢你的帮助!

Erw*_*idt 5

您可以使用contains关键字:

"attributes": {
  "type": "array",
  "items": {
    "type": "string",
    "enum": [   
      "controls",
      "autoplay",
      "muted",
      "loop"
    ]
  },
  "contains": {
    "const": "controls"
  },
  "additionalItems": false
}
Run Code Online (Sandbox Code Playgroud)

从规范:

6.4.6. 包含

此关键字的值必须是有效的 JSON 模式。

如果数组实例至少有一个元素对给定模式有效,则数组实例对“包含”有效。