【发布时间】:2019-09-12 13:03:20
【问题描述】:
我正在尝试使用条件定义 JSON 模式。我构建了一个 MVE,它已经无法按我的预期工作。
我要验证的对象是:
{
"keiner": false,
"abdominal": true,
"zervikal": false
}
条件规则很简单。当“keiner”为真时,其他两个值都必须为假。如果“keiner”为假,则至少其他两个中的一个必须为真。
我写了这个架构:
{
"type": "object",
"properties": {
"keiner": { "type": "boolean" },
"abdominal": { "type": "boolean" }
},
"if": {
"properties": {
"keiner": { "const": true }
}
},
"then": {
"properties" : {
"abdominal": { "const": false },
"zervikal": {"const": false }
}
},
"else": {
"properties": {
"anyOf": [
{ "abdominal": { "const": true } },
{ "zervikal": { "const" : true } }
]
}
}
}
但是 Newtonsoft 在线验证器给出了错误信息
读取“anyOf”的值时遇到意外的标记。预期的 StartObject,布尔值,得到 StartArray。
对于“anyOf”开始的行。这让我很困惑,因为我能找到的所有示例都显示 anyOf 后跟一系列选项。
那我做错了什么?为什么anyOf后面不能有startArray,如何正确编写schema?
【问题讨论】:
-
anyOf 作为模式关键字需要一个子模式数组。但是,您使用 anyOf 作为模式关键字“properties”的子项。所以实际上你正在定义一个名为“anyOf”的属性。这需要一个可以是对象或布尔值的模式。
-
@Clemens 我明白你的意思 - 如果'anyOf' 不在属性对象内,你知道它的正确位置吗?我也试过把它放在'else'里面,但它产生了一个错误。
标签: conditional-statements jsonschema any