【发布时间】:2021-06-11 09:22:25
【问题描述】:
我有三个字段,foo、bar、baz。 bar 依赖于 foo,baz 依赖于 bar:
- foo 是布尔值
- 如果未提供 foo,则禁止使用 bar 和 baz
- foo = true: bar 是必需的枚举值 bar1 & bar2
- foo = false:禁止使用 bar 和 baz
- foo = true & bar = bar1:baz 是必填对象,必填字段 baz1 和非必填字段 baz2 均为字符串
- foo = true & bar = bar2:baz 是必填对象,必填字段 baz3 字符串
所以我开始迭代地构建它。到目前为止,我有
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"foo": {
"type": "boolean"
}
},
"allOf": [
{
"if": {
"not": {
"required": ["foo"]
}
},
"then": {
"not": {
"required": ["bar", "baz"]
}
}
},
{
"if": {
"properties": {
"foo": {
"const": true
}
},
"required": ["foo"]
},
"then": {
"properties": {
"bar": {
"enum": ["bar1", "bar2"]
}
},
"required": ["bar"]
}
},
{
"if": {
"properties": {
"foo": {
"const": false
}
},
"required": ["foo"]
},
"then": {
"not": {
"required": ["bar", "baz"]
}
}
},
{
"if": {
"properties": {
"bar": {
"const": "bar1"
}
},
"required": ["bar"]
},
"then": {
"properties": {
"baz": {
"type": "object",
"properties": {
"baz1": { "type": "number" },
"baz2": { "type": "string" }
},
"required": ["baz1", "baz2"],
"additionalProperties": false
}
},
"required": ["baz"]
}
},
{
"if": {
"properties": {
"bar": {
"const": "bar2"
}
},
"required": ["bar"]
},
"then": {
"properties": {
"baz": {
"type": "object",
"properties": {
"baz3": { "type": "number" },
"baz4": { "type": "string" }
},
"required": ["baz3", "baz4"],
"additionalProperties": false
}
},
"required": ["baz"]
}
}
]
}
它正确验证了我迄今为止尝试过的所有组合,除了当 baz 存在时没有 foo & bar 或 foo = false & no bar 时,它们都验证为 true,即使我希望它作为两个 bar 都是 false如果不需要 foo 并且如果 foo 为假,则 & baz 设置为不需要。我错过了什么?
【问题讨论】:
标签: jsonschema json-schema-validator