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

Jar*_*ede 1 json jsonschema node.js

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

所以我想要这样的东西:

"properties": {
  "track": {
   "type": "string",
   "pattern": "(exclusive)"
  },
  "track": {
   "type": "string",
   "pattern": "(featuring)"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*ers 7

您可以将架构与allOfanyOfoneOf关键字组合起来。这些关键字中的每一个都采用一组模式并执行其所说的操作。allOf如果所有模式都有效,则有效。anyOf如果任何模式有效,则该模式有效。oneOf如果其中一个模式有效,则该模式有效。

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

{
  "type": "object",
  "properties": {
    "track": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "(exclusive)"
        },
        {
          "type": "string",
          "pattern": "(featuring)"
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)