【问题标题】:validate array json contains several unordered objects using json schema验证数组 json 包含几个使用 json 模式的无序对象
【发布时间】:2020-03-29 06:10:22
【问题描述】:

问题

我想使用 json schema draft 7 来验证一个数组是否包含多个无序对象。例如,数组应包含学生 A、B,无论他们的顺序如何。

[{"name": "A"}, {"name": "B"}] //valid
[{"name": "B"}, {"name": "A"}] //valid
[{"name": "A"}, {"name": "C"}, {"name": "B"}] //extra students also valid
[] or [{"name": "A"}] or [{"name": "B"}] //invalid

当前尝试

json schema contains 关键字不支持列表

json schema Tuple validation 关键字必须排序

【问题讨论】:

    标签: jsonschema


    【解决方案1】:

    您需要allOf 应用程序关键字。您需要定义多个contains 子句。

    allOf 允许您定义多个必须全部通过的模式。

    {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "allOf": [
        {
          "contains": {
            "required": ["name"],
            "properties": {
              "name": {
                "const": "A"
              }
            }
          }
        },
        {
          "contains": {
            "required": ["name"],
            "properties": {
              "name": {
                "const": "B"
              }
            }
          }
        }
      ]
    }
    

    Live demo here.

    【讨论】:

    • 您也应该在其中的每一个中添加一个required 和一个type
    • required 是必需的,但 type 不是必需的,因为 const 不关心类型。但是,添加 type 并没有什么坏处,而且它表明了意图。
    • 更新答案以反映建议的更改。
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2015-06-11
    相关资源
    最近更新 更多