【问题标题】:How to do json schema validation on collection+json objects?如何对集合 + json 对象进行 json 模式验证?
【发布时间】:2018-08-23 12:56:00
【问题描述】:

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

【问题讨论】:

  • 在您的data 数组中,您似乎实际上拥有不同类型的数据。你控制架构吗?我问是因为如果您能够在“数据”对象上包含“类型”属性,这可以很快完成。
  • 我无法更改数据的呈现方式。

标签: jsonschema collection-json


【解决方案1】:

我睡了一夜,想出了如何制作 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"
                }
            }
        }
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-21
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多