json - 存在用于验证列表之一中的至少一个元素的 Jsonschema
问题描述
我有一个json,像这样:
{
"listA": [
{
"prop1": "mine"
},
{
"prop1": "mine"
}
],
"listB": [
{
"prop1": "mine"
}
],
"propsForAll": {
"property1": "value",
"property2": "value"
}
}
我需要 json 模式来验证是否存在任何列表中的至少一个元素 {listA, listB, listC}
目前,我的架构如下所示:
"properties": {
.....
"listA": {
"type": "array",
"items": {
"$ref": "#/definitions/elementA"
},
"minItems": 1
},
"listB": {
"type": "array",
"items": {
"$ref": "#/definitions/elementB"
},
"minItems": 1
},
"listC": {
"type": "array",
"items": {
"$ref": "#/definitions/elementC"
},
"minItems": 1
},
.....
},
.....
"anyOf": [
{
"required": [
"listA"
]
},
{
"required": [
"listB"
]
},
{
"required": [
"listC"
]
}
],
但是如果我有一个带有一个元素的 listA 和 listC - 为空,我会得到验证异常,这不是我需要的。我需要在任何列表中有一个元素,有什么想法吗?
解决方案
您需要将minItems: 1
约束移动到您的anyOf
子模式。
这是一个现场演示:https ://jsonschema.dev/s/RszNl
{
"properties": {
"listA": {
"type": "array",
"items": {
}
},
"listB": {
"type": "array",
"items": {
}
},
"listC": {
"type": "array",
"items": {
}
}
},
"anyOf": [
{
"required": [
"listA"
],
"properties": {
"listA": {
"minItems": 1
}
}
},
{
"required": [
"listB"
],
"properties": {
"listB": {
"minItems": 1
}
}
},
{
"required": [
"listC"
],
"properties": {
"listC": {
"minItems": 1
}
}
}
]
}
推荐阅读
- ios - 如何检查目录存在?
- javascript - 这个 gpu 操作的算法?
- html - 如何自定义排列位置绝对 div 标签
- angular - AOT - Angular 6 - 指令 SomeComponent,预期 0 个参数,但得到 1。对于自制组件
- ionic-framework - 拒绝在框架中显示网站,因为它在 Ionic 中将“X-Frame-Options”设置为“拒绝”?
- sql - 选择即使 0 个条目
- android - 显示软键盘时防止线性布局向上滚动
- python - pip 不会在 Windows 中升级
- java - 结果集:值无法插入到 HashMap
- python - 如何从python中的嵌套数组中计算嵌套的json对象