带有强制和可选元素的数组的JSON模式验证

时间:2019-12-04 15:38:49

标签: json jsonschema

我正在开发一个JSON模式来验证像这样的文档:

{
    "map": [

        {
            "key": "mandatoryKey1",
            "value": "value1"
        },
        {
            "key": "mandatoryKey2",
            "value": "value2"
        },
        {
            "key": "otherStuff",
            "value": "value3"
        },
        {
            "key": "someMoreStuff",
            "value": "value4"
        }
    ]
}

文档需要具有包含包含键和值的元素的“映射”数组。必须有2个元素,包含strictedKey1和essentialKey2。允许任何其他键值对。元素的顺序无关紧要。我发现这很难用JSON模式表示。我可以强制架构检查像这样的强制性键(因为它很简单,所以省略了定义部分):

"map": {
    "type": "array",
    "minItems": 2,
    "items": {
        "oneOf": [
            {
                "$ref": "#/definitions/mandatoryElement1"
            },
            {
                "$ref": "#/definitions/mandatoryElement2"
            }
        ]
    }
}

问题是:

  • 它验证文档是否包含必需数据,但不允许任何其他键/值对。
  • 它不检查重复项,因此可以通过两次包含requiredElement1来作弊。项的唯一性只能通过元组验证来检查,由于项的顺序无关紧要,因此我不能在这里应用。

我在这里看到的基本问题是数组元素以某​​种方式需要彼此了解,即,仅在存在强制键的情况下才允许任意键/值对。 JSON Schema似乎无法实现这种“条件验证”。有更好的方法吗?

0 个答案:

没有答案