最新的JSON模式验证版本(2019-09)允许使用 contains 关键字放置条件(子模式),以及该条件可以出现多少次在JSON模式中使用 minContains 和 maxContains 。该功能在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
两次时才通过验证,我该如何实现?
任何帮助表示赞赏!谢谢。
答案 0 :(得分:1)
没有,这就是为什么我们为草稿2019-09
添加了关键字。抱歉。
答案 1 :(得分:0)
在草案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 }
}
}
}
}