如何在collection + json对象上进行json模式验证?

时间:2018-08-23 12:56:01

标签: jsonschema collection-json

我想用在同一数组下具有不同格式的架构来验证collection + json对象。例如:

{
    "href": "https://example.com/whatnot",
    "data": [
        {
            "name": "foo",
            "value": "xyz:123:456"
        },
        {
            "name": "bar",
            "value": "8K"
        },
        {
            "name": "baz",
            "value": false
        }
    ]
}

在这里,值是正则模式(\ w +:\ d +:\ d +)之一,正则([\ w \ d] +)之一,而正则是布尔值之一。没有其他变化。

json模式中是否可以根据这些要求检查此列表?

1 个答案:

答案 0 :(得分:0)

我睡了一夜,想出了如何制作oneOf模式。我试图在“属性”中使用它,但事实证明这是无法完成的。对于完美的解决方案,我想我需要“ explicitOf”这种方法。但是,这已经足够了。

{
    "type": "object",
    "required": [
        "name",
        "value"
    ],
    "oneOf": [
        {
            "properties":
            {
                "name":
                {
                    "type": "string",
                    "pattern": "foo"
                },
                "value":
                {
                    "type": "string",
                    "pattern": "^(\\w+:\\d+:\\d+)$"
                }
            }
        },
        {
            "properties":
            {
                "name":
                {
                    "type": "string",
                    "pattern": "bar"
                },
                "value":
                {
                    "type": "string",
                    "pattern": "^([\\w\\d]+)$"
                }
            }
        },
        {
            "properties":
            {
                "name":
                {
                    "type": "string",
                    "pattern": "baz"
                },
                "value":
                {
                    "type": "boolean"
                }
            }
        }
    ]
}