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

UI传入空/Null值时,JSON Schema枚举类型默认值不生效问题咨询

解决JSON Schema枚举类型在传入空/Null时默认值不生效的问题

问题根源

JSON Schema的default关键字仅在属性完全缺失时生效,当UI显式传入null或空字符串""时,不属于属性缺失场景,因此默认值不会触发。另外你当前的Schema存在语法错误:default = "N"应该改为"default": "N"(JSON语法要求键值对用冒号分隔)。

可行解决方案

方案1:使用JSON Schema条件校验+默认值(需支持Draft 7+的校验器,如Ajv)

通过if-then-else规则,针对传入null或空字符串的场景,强制应用默认值。示例Schema如下:

{
  "BankAccount": {
    "type": ["string", "null"],
    "oneOf": [
      { "enum": ["Y", "N"] },
      { "const": "" },
      { "const": null }
    ],
    "default": "N",
    "if": {
      "anyOf": [
        { "const": "" },
        { "const": null }
      ]
    },
    "then": {
      "default": "N"
    }
  }
}

注意:部分JSON Schema校验器需要开启默认值填充配置(比如Ajv需设置useDefaults: true),才能让条件默认值生效。

方案2:数据预处理拦截(通用方案,不受校验器限制)

在将UI传入的数据提交给JSON Schema校验前,手动遍历数据,把值为null或空字符串的BankAccount字段替换为默认值"N"。以JavaScript为例:

// 假设uiData是UI传入的原始数据
const uiData = { BankAccount: "" }; // 或null

// 预处理逻辑
if (uiData.BankAccount === null || uiData.BankAccount === "") {
  uiData.BankAccount = "N";
}

// 再进行JSON Schema校验
const validate = ajv.compile(schema);
const valid = validate(uiData);

方案3:调整Schema的类型与枚举范围(简化版)

如果允许把空字符串和null视为等效于默认值"N",可以直接将它们加入枚举,同时保留默认值:

{
  "BankAccount": {
    "type": ["string", "null"],
    "enum": ["Y", "N", "", null],
    "default": "N"
  }
}

之后在业务逻辑中,将""或null统一转换为"N"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:12:37