0

我想使用在同一个数组下具有不同格式的模式来验证 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 模式中是否有任何方法可以根据这些要求检查此列表?

4

1 回答 1

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"
                }
            }
        }
    ]
}
于 2018-08-24T12:26:26.063 回答