Jsonschema 用于验证其中一个列表中的至少一个元素是否存在
Jsonschema to validate at least one element in one of the lists is present
我有一个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
}
}
}
]
}
我有一个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
}
}
}
]
}