JSON Schema validation draft-07 中 "minContains" & "maxContains" 的解决方法?



最新的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 }
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新