json 如何在schema中设置负常量

6ioyuze2  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(115)

我有一个试图验证端口号的模式,它正在与端口定义的引用和一个常量值负1进行比较。
当评估一个端口值(21915)时,它说这个值在上面提到的每一个检查(const和port)下都是有效的。
我已经将值更改为0和-1,它不会抱怨,但一旦它大于0,它就会再次开始问题。
端口在单独的文件中定义如下:

...
"port": {
"type": "number",
"multipleOf": 1.0,
"minimum": 1,
"maximum": 65535
},
....

检查的设置方式如下:

"oneOf": [
     {"$ref": "schemaFile.json#/port"},
     {"const": -1},
     {"type": "null"}
]

Error says:
21915.0 is valid under each of {"const": -1}, {"$ref": "schemaDef.json#/port"}

dphi5xsq

dphi5xsq1#

你的模式是正确的。我怀疑问题是你使用的验证器不支持const关键字。const是在JSON Schema draft-06中添加的,所以如果你的验证器是在draft-04中,你可能会得到这个错误。未知的关键字被忽略,所以子模式实际上没有约束,并且总是通过。因此,如果值传递了第一个或第三个模式,您将始终得到oneOf错误,因为传递了多个子模式。
假设我是正确的,你在草案04,你可以使用"enum": [-1]的地方"const": -1和事情应该工作,因为你的期望。

c2e8gylq

c2e8gylq2#

port定义和oneOf定义上存在竞争约束。
const: -1与您的minimummaximum相矛盾,但除此之外,该模式似乎符合您的要求。

传递示例

{
"port": 1
}
# I don't think you expect this but the const -1 overrides the min/max constraints
{
"port": -1
}
{
"port": 21965
}
{
"port": null
}

相关问题