最新的JSON模式验证版本(2019-09(允许使用放置条件(子模式(包含关键字,以及使用minContains&最大包含。此功能在draft-07中不可用。有没有什么方法可以在不使用这些关键词的情况下实现这一点?例如
"answers": [
{
"id": 1,
"text": "choice1",
"isCorrect": true
},
{
"id": 1,
"text": "choice2",
"isCorrect": false
},
{
"id": 1,
"text": "choice3",
"isCorrect": false
},
{
"id": 1,
"text": "choice4",
"isCorrect": false
}
]
}
的条件包含,如下所示:
"contains":{
"properties":{
"isCorrect":{
"enum":["true"]
}
}
}
这至少一次检查isCorrect
是否为true
。但是,如果我希望只有当isCorrect
的值至少是true
的两倍时才能通过验证,我该如何实现呢?感谢您的帮助!谢谢
没有,这就是我们为草案2019-09
添加关键字的原因。很抱歉
在draft-07中没有真正的方法来模拟minContains
/maxContains
。以下是一些最接近的例子。
与"minContains": 2
一样,如果有固定数量的元素。这并不漂亮,但您可以列举这两个项在数组中出现的所有可能方式。
{
"type": "array",
"maxItems": 4,
"minItems": 4,
"anyOf": [
{
"items": [
{ "$ref": "#/definitions/isCorrect-true" },
{ "$ref": "#/definitions/isCorrect-true" }
]
},
{
"items": [
{ "$ref": "#/definitions/isCorrect-true" },
true,
{ "$ref": "#/definitions/isCorrect-true" }
]
},
{
"items": [
{ "$ref": "#/definitions/isCorrect-true" },
true,
true,
{ "$ref": "#/definitions/isCorrect-true" }
]
},
{
"items": [
true,
{ "$ref": "#/definitions/isCorrect-true" },
{ "$ref": "#/definitions/isCorrect-true" }
]
},
{
"items": [
true,
{ "$ref": "#/definitions/isCorrect-true" },
true,
{ "$ref": "#/definitions/isCorrect-true" }
]
},
{
"items": [
true,
true,
{ "$ref": "#/definitions/isCorrect-true" },
{ "$ref": "#/definitions/isCorrect-true" }
]
}
],
"definitions": {
"isCorrect-true": {
"type": "object",
"properties": {
"isCorrect": { "const": true }
}
}
}
}
与"minContains": 2
一样,除了所有true
项都需要位于数组中的第一位之外。
{
"type": "array",
"items": [
{ "$ref": "#/definitions/isCorrect-true" },
{ "$ref": "#/definitions/isCorrect-true" }
],
"definitions": {
"isCorrect-true": {
"type": "object",
"properties": {
"isCorrect": { "const": true }
}
}
}
}
与"maxContains": 2
一样,除了所有true
项都需要位于数组中的第一位之外。
{
"type": "array",
"items": [
true,
true
],
"additionalItems": { "not": { "$ref": "#/definitions/isCorrect-true" } },
"definitions": {
"isCorrect-true": {
"type": "object",
"properties": {
"isCorrect": { "const": true }
}
}
}
}
与"minContains": 2, "maxContains": 2
一样,除了所有true
项都需要位于数组中的第一位之外。
{
"type": "array",
"items": [
{ "$ref": "#/definitions/isCorrect-true" },
{ "$ref": "#/definitions/isCorrect-true" }
],
"additionalItems": { "not": { "$ref": "#/definitions/isCorrect-true" } },
"definitions": {
"isCorrect-true": {
"type": "object",
"properties": {
"isCorrect": { "const": true }
}
}
}
}