我有一组验证选项:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "parsePosition Validator",
"type": "object",
"properties": {
"option1": {
"type": "array",
"items": {
"tpye": "number"
},
"minItems": 3
},
"option2": {
"type": "array",
"items": {
"tpye": "number"
},
"minItems": 3
},
"option3": {
"oneOf": [
{
"type": "array",
"items": {
"tpye": "number"
},
"minItems": 3
},
{
"x": { "type":"number" },
"y": { "type":"number" },
"z": { "type":"number" },
"required": ["x","y","z"]
}
}
},
"oneOf": [
{ "required":["option1"] },
{ "required":["option2"] },
{ "required":["option3"] }
]
}
本质上,json 的输入可以是三个选项中的任何一个。尝试验证 option3 时出现了我的问题。可能的输入可能是:
{
"option3": [1,2,3]
}
要么
{
"option3": {
"x": 1,
"y": 2,
"z": 3
}
}
但是,当我使用数组而不是对象时,验证器不会抛出空数组或大小不正确的数组的问题。
我错过了什么吗?
你错过了一些非常简单的东西......
您尚未将type: object
第二个子模式放入oneOf
. 对于选项 3。
您需要它的原因是因为 JSON Schema 是一种基于约束的语言。
指定properties
, 并不意味着实例位置必须是一个对象;您还需要说“这个位置应该是一个对象”。
任何大小的数组在您的 subschema 下都是有效的oneOf[1]
,因为properties
和 `required 仅适用于一个对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句