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

JSON Schema如何配置互斥属性:必选二选一、可选互斥可都不选

JSON Schema 实现方案

你原有针对A、B属性的oneOf规则逻辑完全正确,只需要把A/B的校验规则、C/D的校验规则通过allOf组合(要求所有规则同时生效),再补充C/D互斥的校验逻辑即可,不需要修改原有代码。

核心规则代码

{
  "allOf": [
    // 原有A、B二选一且互斥的规则,无需修改
    {
      "oneOf": [
        { "required": ["A"] },
        { "required": ["B"] }
      ]
    },
    // 新增C、D互斥(允许均不传入)规则
    {
      "not": {
        "required": ["C", "D"]
      }
    }
  ],
  // 按需补充属性定义即可
  "properties": {
    "A": { "type": "string" },
    "B": { "type": "string" },
    "C": { "type": "string" },
    "D": { "type": "string" }
  }
}

规则逻辑说明

  • allOf的作用是要求数组内的所有校验规则必须全部满足,两个规则独立生效不会冲突
  • 原有A/B规则保持不变:强制要求A、B必须出现其中一个,且不能同时存在
  • C/D规则通过not + required实现:逻辑为禁止JSON同时包含C和D两个属性,天然覆盖三种合法场景:仅传C、仅传D、C和D都不传,完全符合需求

校验效果验证

  • 合法场景全部放行:
    • {"A":"Prop", "C":"Prop"}:满足A存在、C和D未同时出现,校验通过
    • {"B":"Prop", "D":"Prop"}:满足B存在、C和D未同时出现,校验通过
    • {"B":"Prop"}:满足B存在、C和D都未传入,校验通过
  • 非法场景全部拦截:
    • {"A":"Prop", "B":"Prop"}:违反A/B的oneOf规则,校验失败
    • {"C":"Prop", "D":"Prop"}:违反C/D的not规则,校验失败

如果你使用的JSON Schema版本对not关键字支持有问题,也可以用冗余版的oneOf写法实现C/D规则,效果完全一致:

{
  "oneOf": [
    { "not": { "anyOf": [{ "required": ["C"] }, { "required": ["D"] }] } },
    { "required": ["C"] },
    { "required": ["D"] }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:06:22