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

JSON Schema中oneOf互斥校验未按预期生效问题

问题原因

你的Schema没实现预期互斥效果,核心是存在多处关键字用法、字段名、语法错误,根本没触发oneOf的互斥校验逻辑:

  • oneOf是JSON Schema的组合校验关键字,不能放在properties对象里当属性名,需要和type、properties这类关键字同级,才能对当前节点执行互斥分支校验
  • 字段名前后完全不统一:需求里明确的字段是productCodes、productCodesArray,你代码里混写了reasons、reasonsArray、productsIds、productsCodesArray,字段名不匹配自然没法按预期规则校验
  • 关键字拼写/位置错误:你把对象用的additionalProperties错拼成数组专用的additionalItems还放错了层级;minItems是数组级别的校验规则,被你错放到items子节点里,完全不生效
  • 没做额外字段限制:就算oneOf位置写对,不配置额外字段禁止规则,对象里同时塞两个互斥字段也会被漏判
正确实现的Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://examples.com/schemas/my-array-schema",
  "type": "object",
  "required": ["productCodesResult"],
  "properties": {
    "productCodesResult": {
      "type": "object",
      "oneOf": [
        { "$ref": "#/definitions/productCodesDef" },
        { "$ref": "#/definitions/productCodesArrayDef" }
      ],
      "additionalProperties": false
    }
  },
  "definitions": {
    // 分支1:单层产品编码数组 productCodes: [12224, 444444]
    "productCodesDef": {
      "type": "object",
      "required": ["productCodes"],
      "properties": {
        "productCodes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "integer"
          }
        }
      },
      "additionalProperties": false
    },
    // 分支2:嵌套产品编码数组集合 productCodesArray: [[12222,55555],[11111,99999]]
    "productCodesArrayDef": {
      "type": "object",
      "required": ["productCodesArray"],
      "properties": {
        "productCodesArray": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "integer"
            }
          }
        }
      },
      "additionalProperties": false
    }
  }
}
校验逻辑说明
  • productCodesResult节点直接配置oneOf数组,两个分支分别对应两种合法结构,要求传入数据必须恰好匹配其中一个分支的规则
  • 每个分支定义和外层节点都加了additionalProperties: false,从根本上禁止同时出现两个互斥字段,不会出现两种结构共存的漏判
  • 所有minItems都放到了对应数组的规则层级,保证编码数组不能为空
  • 所有字段名和需求完全对齐,不会出现字段名不匹配的校验失效问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:54:28