json - “maxContains”限制不适用于 JSON 模式
问题描述
如何检查以下 JSON 中的属性是否严格isCorrect
具有一次值。true
将其视为只有一个答案的多项选择题,因此数组中可以有很多元素,但答案只能在所有元素中为真一次。
"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
being 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
错误吗?任何帮助表示赞赏!
解决方案
minContains
并被maxContains
添加到draft 2019-09
. 它们不是 的一部分draft-07
,未知关键字将被忽略。
在撰写本文时,2019-09 草案还很新,只有一个已知的实现。
现在,您必须自己将关键字实现为扩展(如果您使用的库支持此类事情),或者编写在 JSON Schema 验证之后发生的额外业务逻辑代码。
推荐阅读
- bash - 不在 git 存储库中时无法抑制 git 分支错误
- reactjs - PanResponder 限制到父容器视图
- mediawiki - Mediawiki AuthManager 和 SessionManager SSO
- lucene - Apache Lucene:在字符串之间创建索引并进行智能搜索
- javascript - 在表 jquery 中搜索和过滤项目
- c - C90中的RLE压缩和解压实现
- android - Intel haxm 7.2 版没有数字签名?
- javascript - MEAN - mongoose 使用 findById 获取完整对象
- javascript - “异步延迟”一起使用时有什么作用?
- visual-studio-code - 项目的 VS Code 扩展建议