【问题标题】:How do I make a jsonschema so that it validates all objects in array?如何制作 jsonschema 以验证数组中的所有对象?
【发布时间】:2018-03-16 11:28:20
【问题描述】:

我正在尝试使用 json-schema 验证 JSON 输入,但它不像我需要的那样工作。

我有以下输入 JSON(其中的一部分):

[
  {
    "admin_state": "disabled"
  },
  {
    "state": "disabled"
  }
]

还有以下 json-schema(也是其中的一部分):

{
  "type": "array",
  "items": [
    {
      "type": "object",
      "properties": {
        "admin_state": {
          "type": "string",
          "default": "enabled",
          "enum": [
            "disabled",
            "enabled"
          ]
        }
      },
      "additionalProperties": false
    }
  ],
  "minItems": 1
}

我希望验证因不应允许的“状态”属性而失败(感谢 "additionalProperties": false 选项)

但是,我可以在数组的第二项中添加/更改任何内容,验证总是成功的。当我更改第一项中的任何内容时,验证失败(如预期的那样)。

我错过了什么?

感谢您的帮助!

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    JSON Schema 草案 7 州...

    如果“items”是一个模式,则验证成功,如果所有元素在 数组已成功验证该架构。

    如果“items”是一个模式数组,则验证成功,如果每个元素 实例的验证针对同一位置的架构,如果 任何。

    在您的架构中,items 是一个数组,这意味着您只是将该数组中的子架构应用于实例数组的第一个元素。只需从items 中删除方括号,您的子模式将适用于实例中的所有项目。

    {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "admin_state": {
            "type": "string",
            "default": "enabled",
            "enum": [
              "disabled",
              "enabled"
            ]
          }
        },
        "additionalProperties": false
      },
      "minItems": 1
    }
    

    【讨论】:

    • 现在完全理解了,感谢您的清晰解释。我刚刚测试过它,它运行良好!
    • 欢迎投票并接受答案 =] 如果您有任何无法在此处提出的问题(或无论如何都加入),也可以随时加入 JSON Schema slack。
    • @Relequestual 你为我节省了很多时间。在线模式生成器到处都添加了方括号。
    • 这只是为我节省了一些未来的灾难性数据清理!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多