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

如何优化JSON Schema数组条件校验的错误提示准确性?

优化JSON Schema数组校验的错误提示精准度

要解决错误提示冗余、定位不准的问题,核心是缩小校验触发范围,给每个约束加明确标识,避免无差别校验。具体调整方法如下:

  • 精准触发校验逻辑
    用if/then结构限定校验条件:只有当数组包含{"item":"include","value":"yes"}时,才启用后续的强制项校验。这样不会在不满足触发条件时执行多余检查,减少无关错误。

  • 针对单个项做精确校验
    对需要强制存在的项,用contains指定精确匹配规则:

    • 对{"item":"1","value":"1"},直接用contains匹配完整对象,避免模糊的数组项校验牵连其他元素;
    • 对{"item":"2"}的项,单独用contains嵌套value的枚举约束,让校验器只盯着该项的value字段检查,不会触发其他无关项的错误。
  • 给校验规则加明确标识
    为每个contains块添加title和description,让错误提示直接说明问题所在,比如给item=2的校验加描述:“item为'2'的项,value必须是'A'/'B'/'C'之一”,这样错误信息会精准指向问题点。

  • 移除冗余校验规则
    删除全局范围内不必要的数组项约束,只保留和触发条件强相关的逻辑,避免校验器做无意义的检查。

调整后的示例Schema

{
  "type": "array",
  "if": {
    "contains": {
      "type": "object",
      "properties": {
        "item": {"const": "include"},
        "value": {"const": "yes"}
      },
      "required": ["item", "value"]
    }
  },
  "then": {
    "allOf": [
      {
        "contains": {
          "type": "object",
          "properties": {
            "item": {"const": "1"},
            "value": {"const": "1"}
          },
          "required": ["item", "value"],
          "title": "必填项item=1",
          "description": "必须包含{item:'1', value:'1'}的项"
        }
      },
      {
        "contains": {
          "type": "object",
          "properties": {
            "item": {"const": "2"},
            "value": {"enum": ["A", "B", "C"]}
          },
          "required": ["item", "value"],
          "title": "item=2的value校验",
          "description": "item为'2'的项,value必须是'A'/'B'/'C'之一"
        }
      }
    ]
  }
}

这个Schema只会在触发条件满足时,检查两个必填项。如果待校验JSON里item=2的value是Z,校验器只会返回一条关于该项value不符合枚举的错误,同时如果item=1的项缺失,也会单独提示,不会产生冗余的错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:22:40