JsonSchema - 如果定义了另一个数组字段,则只允许数组字段中的一个项目
JsonSchema - Only allow one item in an array field if another array field is defined
我有以下 json,如果存在“tokens”数组(至少有一个项目),我只想允许“leads”只包含一个“id”项目。
JSON
{
"input": {
"leads": [
{
"id": 795333333760
}
],
"tokens": [
{
"name": "tem_x",
"value": "Renew_all"
},
{
"duration": "90",
"eligibility": "eligible"
}
]
}
我有以下架构,表明“令牌”可以有多个项目(如果存在)并且“线索”是必需的。
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"input": {
"type": "object",
"properties": {
"leads": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "integer"
}
},
"required": [
"id"
]
}
]
},
"tokens": {
"type": "array",
"minItems": 1
}
},
"required": [
"leads",
]
}
},
"required": [
"input"
]
}
如果存在“tokens”(因为它未定义为必填字段),是否有办法确保“leads”中仅允许一个项目。如果没有定义“tokens”,那么我想允许“leads”数组有一个以上的项目。
我试过 if-then 但没能正常工作。任何帮助表示赞赏。
谢谢。
尝试这样使用:
{
"properties": {
"tokens": {},
"leads": {}
},
"anyOf": [{
"required" : ["tokens"]
}, {
"required" : ["leads"]
}]
}
so schema looks like this:
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"input": {
"type": "object",
"properties": {
"leads": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "integer"
}
},
"required": [
"id"
]
}
]
},
"tokens": {
"type": "array",
"minItems": 1
}
},
"anyOf": [{
"required" : ["tokens"]
}, {
"required" : ["leads"]
}]
}
},
"required": [
"input"
]
}
这就是 dependencies
关键字的用途。它也可以用 if
/then
或暗示来完成,但是 dependencies
删除了这些模式所需的所有额外样板。下面说,如果定义了“tokens”属性,那么“leads”属性 最多必须有 1 个项目。这将进入您的“输入”模式。
"dependencies": {
"tokens": {
"properties": {
"leads": { "maxItems": 1 }
}
}
}
编辑:dependencies
适用于 draft-04 至 draft-07。在 2019-09 及以后的草案中,您可以改用 dependentSchemas
。
我有以下 json,如果存在“tokens”数组(至少有一个项目),我只想允许“leads”只包含一个“id”项目。
JSON
{
"input": {
"leads": [
{
"id": 795333333760
}
],
"tokens": [
{
"name": "tem_x",
"value": "Renew_all"
},
{
"duration": "90",
"eligibility": "eligible"
}
]
}
我有以下架构,表明“令牌”可以有多个项目(如果存在)并且“线索”是必需的。
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"input": {
"type": "object",
"properties": {
"leads": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "integer"
}
},
"required": [
"id"
]
}
]
},
"tokens": {
"type": "array",
"minItems": 1
}
},
"required": [
"leads",
]
}
},
"required": [
"input"
]
}
如果存在“tokens”(因为它未定义为必填字段),是否有办法确保“leads”中仅允许一个项目。如果没有定义“tokens”,那么我想允许“leads”数组有一个以上的项目。
我试过 if-then 但没能正常工作。任何帮助表示赞赏。 谢谢。
尝试这样使用:
{
"properties": {
"tokens": {},
"leads": {}
},
"anyOf": [{
"required" : ["tokens"]
}, {
"required" : ["leads"]
}]
}
so schema looks like this:
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"input": {
"type": "object",
"properties": {
"leads": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "integer"
}
},
"required": [
"id"
]
}
]
},
"tokens": {
"type": "array",
"minItems": 1
}
},
"anyOf": [{
"required" : ["tokens"]
}, {
"required" : ["leads"]
}]
}
},
"required": [
"input"
]
}
这就是 dependencies
关键字的用途。它也可以用 if
/then
或暗示来完成,但是 dependencies
删除了这些模式所需的所有额外样板。下面说,如果定义了“tokens”属性,那么“leads”属性 最多必须有 1 个项目。这将进入您的“输入”模式。
"dependencies": {
"tokens": {
"properties": {
"leads": { "maxItems": 1 }
}
}
}
编辑:dependencies
适用于 draft-04 至 draft-07。在 2019-09 及以后的草案中,您可以改用 dependentSchemas
。