数组或对象的 Json 模式验证

卡梅伦·朱厄尔

我有一组验证选项:

{
    "$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章