我已经知道如何根据另一个属性的值有条件地要求一个属性的存在。我正在寻找的也是相反的。
就我而言,我有一个名为“type”的属性,它可以有多个值。如果类型等于常量“enum”,那么我还需要存在一个名为“enum”的属性。但我还想要的是,如果存在“enum”属性但“value”不等于常量“enum”,我希望它验证失败。
这是我目前拥有的:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.org/schemas/field",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"group": {
"type": "string"
},
"title": {
"$ref": "i18n.schema.json"
},
"description": {
"$ref": "i18n.schema.json"
},
"type": {
"type": "string",
"enum": [
"boolean",
"string",
"strings",
"path",
"enum",
"map",
"integer",
"password"
]
},
"default": {
"$ref": "value.schema.json"
},
"required": {
"type": "boolean"
},
"dependencies": {
"type": "array",
"items": {
"$ref": "dependency.schema.json"
}
},
"enum": {
"type": "string"
},
"map": {
"$ref": "map.schema.json"
}
},
"required": [
"name",
"title",
"type"
],
"anyOf": [
{
"if": {
"properties": {
"type": {
"const": "enum"
}
}
},
"then": {
"required": [
"enum"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "map"
}
}
},
"then": {
"required": [
"map"
]
}
}
],
"additionalProperties": false
}
我认为您要问的是以下内容:
如果
type: enum
,那么 enum: something
但不是 enum: enum
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "enum"
}
}
},
"then": {
"required": [
"enum"
],
"properties": {
"enum": {
"not": {
"const": "enum"
}
}
}
}
}
]