高级 json-schema 每个 属性 的多个规则

advanced json-schema multiple rules per property

我想知道您是否可以为 属性 设置多个规则。所有的例子似乎都表明你不能。

所以我想要这样的东西:

"properties": {
  "track": {
   "type": "string",
   "pattern": "(exclusive)"
  },
  "track": {
   "type": "string",
   "pattern": "(featuring)"
  }
}

我知道在这个例子中显而易见的事情是让模式成为 "(exclusive)|(featuring)",但我想我想知道哪个规则失败了。同样,我以后可能想要更复杂的模式,这可能无法通过 |.

解决

您可以将架构与 allOfanyOfoneOf 关键字结合使用。这些关键字中的每一个都采用一组模式并按照它所说的去做。 allOf 如果 所有 架构都有效,则 allOf 有效。如果 任何 架构有效,则 anyOf 有效。 oneOf 如果正好 一个 模式有效,则 oneOf 有效。

这是解决您的问题的一种方法。

{
  "type": "object",
  "properties": {
    "track": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "(exclusive)"
        },
        {
          "type": "string",
          "pattern": "(featuring)"
        }
      ]
    }
  }
}