JSON模式数组必须包含特定的字符串

时间:2019-03-01 11:30:20

标签: arrays json validation jsonschema

关于这个问题有几个问题,但是似乎没有一个问题可以解决这个特定问题,有关JSON Schema的文档也没有,所以也许无法解决。

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

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

因此,数组中的值只能是这四个值之一。但是,“控件”必须始终是数组的一部分,而其他三个则是可选的。如果它是一个对象数组,我们可以要求这样做,但是我不确定如何检查具有特定值的数组。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用contains关键字:

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

根据规范:

  

6.4.6. contains

     

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

     

如果数组实例中至少有一个包含,则该数组实例对“包含”有效   元素对给定的架构有效。