给出以下架构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"worktype": {
"blue": {
"enum": [1, 2, 3]
},
"red": {
"enum": [4, 5, 6]
}
}
}
}
我可以验证一个数组是否包含所有" blue"项目或"红色"像这样的项目:
{
"type": "array",
"items": {
"$ref": "#/definitions/worktype/red" // or worktype/blue
}
}
但是如何验证数组只有" blue"或"红色"工作类型,但不是混合的?
例如:
[1, 2]: Valid (only blue)
[5]: Valid (only red)
[1, 6]: Invalid (mixed blue and red)
我的第一个想法是使用oneOf
:
{
"type": "array",
"items": {
"oneOf": [
{"$ref": "#/definitions/worktype/red"},
{"$ref": "#/definitions/worktype/blue"},
]
}
}
但是这会针对模式检查每个条目,因此例如[1, 6]
也是有效的。 (在这种情况下,oneOf
并不意味着&#34; 所有项目必须对一个一起有效&#34;但是&#34; < strong>每个项必须对一个自身&#34;)有效。
如何为只有&#34; blue&#34;的数组编写模式?或&#34;红色&#34;工作类型,但不是两者兼而有之?这可能吗?
答案 0 :(得分:0)
我明白了,我的第一个想法是正确的,但是oneOf
只是嵌套了一层太深。这就像我想要的那样:
{
"type": "array",
"oneOf": [
{
"items": {
"$ref": "#/definitions/worktype/red"
}
},
{
"items": {
"$ref": "#/definitions/worktype/blue"
}
}
]
}