高级 json-schema 每个 属性 的多个规则
advanced json-schema multiple rules per property
我想知道您是否可以为 属性 设置多个规则。所有的例子似乎都表明你不能。
所以我想要这样的东西:
"properties": {
"track": {
"type": "string",
"pattern": "(exclusive)"
},
"track": {
"type": "string",
"pattern": "(featuring)"
}
}
我知道在这个例子中显而易见的事情是让模式成为 "(exclusive)|(featuring)"
,但我想我想知道哪个规则失败了。同样,我以后可能想要更复杂的模式,这可能无法通过 |
.
解决
您可以将架构与 allOf
、anyOf
和 oneOf
关键字结合使用。这些关键字中的每一个都采用一组模式并按照它所说的去做。 allOf
如果 所有 架构都有效,则 allOf
有效。如果 任何 架构有效,则 anyOf
有效。 oneOf
如果正好 一个 模式有效,则 oneOf
有效。
这是解决您的问题的一种方法。
{
"type": "object",
"properties": {
"track": {
"anyOf": [
{
"type": "string",
"pattern": "(exclusive)"
},
{
"type": "string",
"pattern": "(featuring)"
}
]
}
}
}
我想知道您是否可以为 属性 设置多个规则。所有的例子似乎都表明你不能。
所以我想要这样的东西:
"properties": {
"track": {
"type": "string",
"pattern": "(exclusive)"
},
"track": {
"type": "string",
"pattern": "(featuring)"
}
}
我知道在这个例子中显而易见的事情是让模式成为 "(exclusive)|(featuring)"
,但我想我想知道哪个规则失败了。同样,我以后可能想要更复杂的模式,这可能无法通过 |
.
您可以将架构与 allOf
、anyOf
和 oneOf
关键字结合使用。这些关键字中的每一个都采用一组模式并按照它所说的去做。 allOf
如果 所有 架构都有效,则 allOf
有效。如果 任何 架构有效,则 anyOf
有效。 oneOf
如果正好 一个 模式有效,则 oneOf
有效。
这是解决您的问题的一种方法。
{
"type": "object",
"properties": {
"track": {
"anyOf": [
{
"type": "string",
"pattern": "(exclusive)"
},
{
"type": "string",
"pattern": "(featuring)"
}
]
}
}
}