我已经定义了具有某些属性的架构...基于条件,我想禁用/启用属性...此外,我也需要一些默认行为... 注意:“ additionalProperties”将始终为false。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$ref": "#/TestProperties",
"TestProperties": {
"type": "object",
"additionalProperties": false,
"properties": {
"A": { "$ref": "#/valueDefinition/stringObject" },
"B": { "$ref": "#/valueDefinition/stringObject" },
"C": { "$ref": "#/valueDefinition/stringObject" },
"D": { "$ref": "#/valueDefinition/stringObject" },
"E": { "$ref": "#/valueDefinition/stringObject" }
},
"if": {
"properties": {
"A": { "const": "Start" }
}
},
"then": {
"not": { "required": ["C", "D", "E"] },
"required": ["B"]
},
"else": {
"if": {
"properties": {
"taskType": { "const": "Stop" }
}
},
"then": {
"not": { "required": ["D", "E"] },
"required": ["B", "C"]
},
"else": {
"not": { "required": ["B", "C"] },
"required": ["D", "E"]
}
}
},
"valueDefinition": {
"stringObject": {
"type": "string",
"pattern": "^(?!\\s*$).+"
}
}
}
如果我输入的是
{
"A":"Start",
},
抛出错误,说缺少必填项...
如果我输入的是
{
"A":"Start",
"B":"xxxx"
}
它显示为有效的JSON ...
但是,如果我输入的是
{
"A":"Start",
"B":"xxxx",
"C":"yyyy"
}
它没有抛出任何错误...我的期望是它不应该容纳C
答案 0 :(得分:0)
只有当所有“ C”,“ D”和“ E”都不存在时,类似以下内容的内容才有效。
"not": { "required": ["C", "D", "E"] },
如果不存在“ C”,“ D”或“ E”中的任何一个,则您希望它有效。
"not": {
"anyOf": [
{ "required": ["C"] },
{ "required": ["D"] },
{ "required": ["E"] }
]
}