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

JSON Schema校验:If/Then/Else语句数组多元素规则适配问题

问题分析与解决方案

你的JSON Schema逻辑存在偏差:当前的if条件要求数组所有元素的afs_emp_rep_Capacity都包含Current director of licensee,才会触发then规则(要求所有元素必须有afs_emp_rep_verify)。但你的实际需求是针对数组中每个独立元素——只要元素的afs_emp_rep_Capacity包含指定值,就必须有afs_emp_rep_verify字段,和其他元素无关。

修正后的Schema

{
  "allOf": [
    {
      "if": {
        "properties": {
          "report_body": {
            "properties": {
              "licensees_schemes_rep_involved": {
                "properties": {
                  "report_submit_licensee": { "const": "Yes" }
                },
                "required": ["report_submit_licensee"]
              }
            },
            "required": ["licensees_schemes_rep_involved"]
          }
        },
        "required": ["report_body"]
      },
      "then": {
        "properties": {
          "report_body": {
            "properties": {
              "afs_employee_director_rep": {
                "items": {
                  "if": {
                    "properties": {
                      "afs_emp_rep_Capacity": { "contains": { "const": "Current director of licensee" } }
                    },
                    "required": ["afs_emp_rep_Capacity"]
                  },
                  "then": { "required": ["afs_emp_rep_verify"] }
                }
              }
            }
          }
        }
      }
    }
  ]
}

逻辑说明

  1. 外层条件控制:只有当report_submit_licensee为Yes时,才会对afs_employee_director_rep数组的元素应用校验规则。
  2. 元素级独立校验:数组的每个元素单独判断:
    • 如果元素的afs_emp_rep_Capacity包含Current director of licensee,则强制要求该元素必须有afs_emp_rep_verify字段。
    • 不满足Capacity条件的元素,不受该字段的必填限制。

校验结果验证

  • 第一个测试Payload:数组元素符合Capacity条件但缺少afs_emp_rep_verify,会触发校验失败,符合预期。
  • 第二个测试Payload:第一个元素符合Capacity条件且缺少afs_emp_rep_verify,会被检测出错误;第二个元素不符合条件,无需校验该字段,因此整个Payload会被正确判定为校验失败,符合你的实际需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:35