无法编写 Json 模式来验证数组内的属性

问题描述 投票:0回答:1

我正在尝试编写 Json 模式来验证包含以下内容的 json 文件:

{ “1号”, “根属性”: [ {
“属性1”:“值1” }, {
“属性2”:“值2” } ] }

该架构应处理以下场景:

  1. 如果 property2 存在而 property1 缺失,则应报告错误,指出 property1 缺失,因为它是强制性的。
  2. 如果 property1 存在而 property2 缺失,则应报告错误,指出 property2 缺失,因为它是强制性的。
  3. 如果 property1 和 property2 都存在,则不应报告错误。
  4. 如果先提到property2,再提到property1,应该不会报错。
  5. 如果提到property1和property2以外的属性,应该报错(additionalProperties:false?)
  6. property1 和 property2 不应重复(uniqueItems:true?)

有人可以帮忙吗?

此外,模式是否是处理这种深度验证的正确方法?

当我尝试对 rootProperty 数组使用“items”关键字并在所需条件内提到 property1 和 property2 时,会对数组的每个元素评估这些条件,这会导致错误,指出第一个元素中缺少 property2,第二个元素中缺少 property1元素。 此外,使用“包含”会导致错误,指出对象包含无法针对任何属性或附加属性进行评估的属性。

javascript json schema jsonschema json-schema-validator
1个回答
0
投票

要使用 JSON Schema 验证数组内的属性,您可以使用 contains 和 minContains 关键字来确保 property1 和 property2 至少存在一次。这是一个应该满足您的要求的架构:

json

{
  "type": "object",
  "properties": {
    "number": { "type": "string" },
    "rootProperty": {
      "type": "array",
      "items": { "type": "object" },
      "contains": [
        { "required": ["property1"] },
        { "required": ["property2"] }
      ],
      "minContains": 2,
      "additionalProperties": false,
      "uniqueItems": true
    }
  },
  "required": ["number", "rootProperty"]
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.