jsonschema:验证数组是否包含元素,而不会在其他元素上出错

时间:2013-07-08 18:37:01

标签: arrays json validation schema jsonschema

我最近发现了jsonschema并且我一直很喜欢使用它,但是最近我遇到了一些我想要做的事情,而我却无法弄明白。

我想要做的是验证数组是否必须包含与模式匹配的元素,但我不希望对列表中的其他元素进行验证失败。

假设我有一个如下所示的数组:

arr = [
          {"some object": True},
          False,
          {"AnotherObj": "a string this time"},
          "test"
       ]

我希望能够做类似“验证arr包含一个具有属性'的对象'某个对象'是一个布尔值的对象,如果没有,则会出错,但不关心其他元素。”

我不希望它验证列表中的其他项目。我只是想确保列表包含一个与模式至少匹配一次的元素。我也不知道元素到达数组的顺序。

我已经尝试过这样的架构,如:

   {"type": "array",
    "items": {
        "type": "object",
        "properties": {
            "tool": {
                # A schema here to validate tool
            },
        "required": ["tool"]
        }
    }

问题在于它要求数组中的每个项目都具有属性“工具”,而不是我真正想要的属性。

任何人都可以给我的任何帮助将非常感谢!很长一段时间我没有前进的进展,我一直很难过。

谢谢!

1 个答案:

答案 0 :(得分:0)

我已经得到了这个问题的答案: 使用的模式是(其中...... B ...是要求的模式):

{
    "type": "array",
    "not": {
        "items": {
            "not": {... B ...}
        }
    }
}

它基本上可以说是“确保不(项目与B不匹配)”。我不是100%清楚为什么它的工作方式如此,但它确实如此,我想我会为后代分享它。