验证数组的所有元素

Validate all elements of an array

我正在尝试在其关联架构中验证 JSON。

我正在使用以下网站进行验证:https://www.jsonschemavalidator.net/

我的测试数据是这样的

[
  {
    "testString": "string value",
    "testInt": 1
  },
  {
    "testString": "another string value",
    "testInt": 2
  }
]

模式定义如下

{
  "type": "array",
  "items": [
    {
      "type": "object",
      "properties": {
        "testString": {
          "type": "string"
        },
        "testInt": {
          "type": "integer"
        }
      },
      "required": [
        "testString",
        "testInt"
      ],
      "additionalProperties": false
    }
  ]
}

对于给定的示例,它运行良好,但是如果我将意外属性添加到第二个元素中,它不会被检测为错误。 否则如果我将它添加到第一个元素

所以这有效(检测为错误JSON)

[
  {
    "testString": "string value",
    "testInt": 1,
    "unexpectedAttribute": "unexpected value"
  },
  {
    "testString": "another string value",
    "testInt": 2
  }
]

但这不起作用(检测为有效JSON)

[
  {
    "testString": "string value",
    "testInt": 1
  },
  {
    "testString": "another string value",
    "testInt": 2,
    "unexpectedAttribute": "unexpected value"
  }
]

我也试过这个 website 但我得到了相同的结果,所以我认为我可能忘记了我的架构中的某些东西。

有人遇到过同样的问题吗?

您的架构有错误,请从项目中删除多余的 []。使用 [] 时,必须为数组的每个元素添加规则。在您的情况下,只有第一个元素有规则,其他元素没有。您可以以任何方式更改项目数组的第二项,它不会产生任何错误,因为它根本没有经过验证。

{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "testString": {
        "type": "string"
      },
      "testInt": {
        "type": "integer"
      }
    },
    "required": [
      "testString",
      "testInt"
    ]
  }
}