我不确定这是否可以使用JSON架构,但我的数据与此类似:
[1, 1, [0, 0, [true]], true]
如何验证[0,0,1]以便至少有一个项为1 / true?
到目前为止,我已设法创建模式:
{
"type": "array",
"items": {
"$ref": "#/definitions/_items"
},
"definitions": {
"_items": {
"anyOf": [
{
"enum": [
0,
1
],
"type": "integer"
},
{
"enum": [
false,
true
],
"type": "boolean"
},
{
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/_items"
}
]
}
}
]
}
}
}

显然它确实验证了所有接受的值,但它没有考虑到,如果有全部,一些,一个或没有值1 / true。我误解了,anyOf,allOf和oneOf都被保留了......
答案 0 :(得分:2)
您需要的是contains
个关键字。计划在下一版本的JSON Schema规范中添加。在实现之前,您可以在没有contains
的情况下执行此操作,但逻辑有点复杂。我还清理了到目前为止你所拥有的一些不必要的东西。
{
"type": "array",
"items": { "$ref": "#/definitions/_items" },
"allOf": [{ "$ref": "#/definitions/contains-1-or-true" }],
"definitions": {
"_items": {
"anyOf": [
{ "enum": [0, 1] },
{ "type": "boolean" },
{ "$ref": "#" }
]
},
"contains-1-or-true": {
"not": {
"type": "array",
"items": {
"not": { "enum": [1, true] }
}
}
}
}
}