"maxContains" 限制不适用于 JSON 模式
"maxContains" limit not working for JSON schema
如何检查以下 JSON 中 属性 isCorrect
的值是否为 true
strictly once。把它想象成一个只有一个答案的选择题,所以数组中可以有很多元素,但答案在所有元素中只能为真一次。
"answers": [
{
"id": 1,
"text": "choice1",
"isCorrect": true
},
{
"id": 1,
"text": "choice2",
"isCorrect": true
},
{
"id": 1,
"text": "choice3",
"isCorrect": false
},
{
"id": 1,
"text": "choice4",
"isCorrect": false
}
]
}
我使用contains
来验证是否至少有一个元素满足条件,但即使有超过1个isCorrect
为true
的元素,它也会验证,所以我用了maxContains
但是没用。
我的架构:
{
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://eg.com/schema2.json",
"type": "object",
"title": "Example",
"required": ["answers"],
"properties": {
"answers": {
"type": "array",
"contains": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"text": {
"type": "string"
},
"isCorrect": {
"type": "boolean",
"enum": [true]
}
}
},
"maxContains": 1,
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"text": {
"type": "string"
},
"isCorrect": {
"type": "boolean"
}
}
}
}
}
}
不应验证此实例,因为它的 true
值在 isCorrect
中出现两次,并且架构提到 maxContains
为 1,但它不起作用。我做错了什么, maxContains
的位置错了吗?感谢您的帮助!
在 draft 2019-09
中添加了 minContains
和 maxContains
。
它们不是 draft-07
的一部分,未知关键字将被忽略。
在撰写本文时,2019-09 草案还很新,只有一个已知的实现。
现在,您必须自己将关键字实现为扩展(如果您使用的库支持此类功能),或者编写在 JSON 架构验证之后发生的其他业务逻辑代码.
如何检查以下 JSON 中 属性 isCorrect
的值是否为 true
strictly once。把它想象成一个只有一个答案的选择题,所以数组中可以有很多元素,但答案在所有元素中只能为真一次。
"answers": [
{
"id": 1,
"text": "choice1",
"isCorrect": true
},
{
"id": 1,
"text": "choice2",
"isCorrect": true
},
{
"id": 1,
"text": "choice3",
"isCorrect": false
},
{
"id": 1,
"text": "choice4",
"isCorrect": false
}
]
}
我使用contains
来验证是否至少有一个元素满足条件,但即使有超过1个isCorrect
为true
的元素,它也会验证,所以我用了maxContains
但是没用。
我的架构:
{
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://eg.com/schema2.json",
"type": "object",
"title": "Example",
"required": ["answers"],
"properties": {
"answers": {
"type": "array",
"contains": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"text": {
"type": "string"
},
"isCorrect": {
"type": "boolean",
"enum": [true]
}
}
},
"maxContains": 1,
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"text": {
"type": "string"
},
"isCorrect": {
"type": "boolean"
}
}
}
}
}
}
不应验证此实例,因为它的 true
值在 isCorrect
中出现两次,并且架构提到 maxContains
为 1,但它不起作用。我做错了什么, maxContains
的位置错了吗?感谢您的帮助!
draft 2019-09
中添加了 minContains
和 maxContains
。
它们不是 draft-07
的一部分,未知关键字将被忽略。
在撰写本文时,2019-09 草案还很新,只有一个已知的实现。
现在,您必须自己将关键字实现为扩展(如果您使用的库支持此类功能),或者编写在 JSON 架构验证之后发生的其他业务逻辑代码.