You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写符合特定规则的JSON Schema验证数组内属性

解决方案:符合需求的JSON Schema

直接给出满足所有验证场景的Schema(基于JSON Schema Draft 2020-12,需支持contains、maxContains及自定义错误信息的实现,如Ajv):

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string"
    },
    "rootProperty": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "property1": {"type": "string"},
          "property2": {"type": "string"}
        },
        "additionalProperties": false,
        "minProperties": 1,
        "errorMessage": {
          "additionalProperties": "只能包含property1或property2属性",
          "minProperties": "数组元素不能为空对象"
        }
      },
      "allOf": [
        {
          "contains": {"required": ["property1"]},
          "maxContains": 1,
          "errorMessage": {
            "contains": "缺少必填的property1",
            "maxContains": "property1不能重复出现"
          }
        },
        {
          "contains": {"required": ["property2"]},
          "maxContains": 1,
          "errorMessage": {
            "contains": "缺少必填的property2",
            "maxContains": "property2不能重复出现"
          }
        }
      ],
      "errorMessage": {
        "type": "rootProperty必须是数组类型"
      }
    }
  },
  "required": ["number", "rootProperty"],
  "additionalProperties": false
}

各验证场景的实现说明

  • 场景1&2:通过allOf下的两个contains规则实现——数组必须至少包含一个带property1的元素,且至少包含一个带property2的元素。缺少任意一个都会触发对应错误提示。
  • 场景3&4:contains不限制元素顺序,且单个元素可同时包含两个属性,完全符合需求。
  • 场景5:在items的Schema中设置additionalProperties: false,同时仅定义允许的properties为property1和property2,确保元素对象不能有其他属性。
  • 场景6:通过maxContains: 1限制property1和property2各自最多出现一次,避免重复。

关于你的疑问

JSON Schema是否适合这类深度验证?

完全适合。JSON Schema的contains、maxContains、allOf等关键字专门用于处理跨数组元素的聚合验证,合理组合这些关键字就能实现复杂的全局校验逻辑。

你之前尝试的问题分析

  • 用items直接指定required: ["property1", "property2"]:会强制每个数组元素都必须同时包含两个属性,和你允许属性分散在不同元素的需求冲突,因此报错。
  • 使用contains时出现“对象包含无法匹配的属性”错误:大概率是未正确限制元素的additionalProperties,或者contains的子Schema定义有误,导致元素的额外属性触发校验失败。

内容的提问来源于stack exchange,提问作者Pranav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:03:17