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

oneOf属性验证失败:如何修正JSON实例符合Schema规则?

问题根源

你遇到的错误是因为提交的JSON实例同时符合oneOf里的两个子Schema。说白了,就是你定义的两个子Schema没做互斥限制——第一个只说了C是布尔类型,但没要求必须有C,也没说不能有D;第二个只说了D是能被3整除的整数,同样没要求必须有D或者不能有C。所以当你提交只有D:9的实例时,它既不违反第一个Schema的规则,又符合第二个,自然就触发了oneOf“只能匹配其中一个”的验证失败。

修正JSON实例的方法

要让实例通过验证,得确保它只符合其中一个子Schema,同时明确不符合另一个:

要是想匹配带C的子Schema

  • 在B对象里加个布尔类型的C(比如true或者false),然后把D删掉。
  • 示例:
    {
      "B": {
        "C": false
      }
    }
    
    这样实例只会匹配第一个子Schema,因为第二个Schema要求的D不存在,自然就不匹配了。

要是想匹配带D的子Schema

  • 最简单的办法是确保B里只有D:9,同时修改你的Schema(这才是根治问题的办法)——给两个子Schema分别加上required和additionalProperties: false。比如:
    "oneOf": [
      {
        "type": "object",
        "properties": { "C": { "type": "boolean" } },
        "required": ["C"],
        "additionalProperties": false
      },
      {
        "type": "object",
        "properties": { "D": { "type": "integer", "multipleOf": 3 } },
        "required": ["D"],
        "additionalProperties": false
      }
    ]
    
    改完Schema后,只带D:9的实例就只会匹配第二个子Schema,不会触发错误。如果暂时不能改Schema,那只能给实例加个违反第一个Schema的属性(比如"C": "abc"),但这不符合“只能有C或D其中一个”的需求,所以更推荐改Schema。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:03:14