我有一个试图验证端口号的模式,它正在与端口定义的引用和一个常量值负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"}
2条答案
按热度按时间dphi5xsq1#
你的模式是正确的。我怀疑问题是你使用的验证器不支持
const
关键字。const
是在JSON Schema draft-06中添加的,所以如果你的验证器是在draft-04中,你可能会得到这个错误。未知的关键字被忽略,所以子模式实际上没有约束,并且总是通过。因此,如果值传递了第一个或第三个模式,您将始终得到oneOf
错误,因为传递了多个子模式。假设我是正确的,你在草案04,你可以使用
"enum": [-1]
的地方"const": -1
和事情应该工作,因为你的期望。c2e8gylq2#
在
port
定义和oneOf
定义上存在竞争约束。const: -1
与您的minimum
和maximum
相矛盾,但除此之外,该模式似乎符合您的要求。传递示例