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

如何在JSON Schema中实现双可选属性的默认值与互斥校验?

需求可实现性说明

这个需求完全可以实现,具体通过「JSON Schema校验规则」+「数据默认值填充逻辑」结合完成,方案如下:

1. 用JSON Schema实现互斥校验(满足“两个字段同时存在返回错误”的要求)

修改原Schema,通过oneOf关键字限制输入只能符合以下三种情况之一:仅含expires_on_date、仅含expires_on_duration、两个字段都不含。修改后的Schema如下:

{
  "type": "object",
  "required": ["foo"],
  "properties": {
    "foo": { "type": "string" },
    "expires_on_date": {
      "type": "string",
      "format": "date-time"
    },
    "expires_on_duration": {
      "type": "string",
      "format": "duration"
    }
  },
  "oneOf": [
    { "required": ["expires_on_date"] },
    { "required": ["expires_on_duration"] },
    {
      "not": {
        "anyOf": [
          { "required": ["expires_on_date"] },
          { "required": ["expires_on_duration"] }
        ]
      }
    }
  ]
}

这个Schema的核心逻辑是:输入必须严格匹配oneOf中的某一条规则,一旦同时出现两个字段,就会触发校验失败,返回错误。

2. 实现默认值填充(满足“两个字段都缺失时自动设默认值”的要求)

JSON Schema本身的default关键字只是给工具的提示,不会主动修改输入数据,所以需要在Schema校验通过后,添加一段简单的逻辑:

  • 若校验通过且输入中既没有expires_on_date也没有expires_on_duration,则为expires_on_duration赋值"P2D"
  • 若输入中存在其中一个字段,则直接保留原字段值即可

3. 匹配示例场景验证

结合上述两步,完全覆盖所有输入输出场景:

  • 输入{"foo":"baz"}:校验通过,填充默认值后输出{"foo":"baz", "expires_on_duration": "P2D"}
  • 输入{"foo":"baz", "expires_on_duration": "P4D"}:校验通过,直接保留原字段值输出
  • 输入{"foo":"baz", "expires_on_date": "2023-01-18T01:01:01"}:校验通过,直接保留原字段值输出
  • 输入同时包含两个字段的JSON:Schema校验失败,返回ERROR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:55:20