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

求助:在Helm中使用JSON Schema 2020-12实现可选枚举

Helm中JSON Schema 2020-12枚举属性非必填校验问题

问题场景

我在Helm中使用JSON Schema draft 2020-12版本,想要实现一个非必填的枚举属性:未指定该属性时直接忽略,指定时则校验值是否在枚举范围内。但当前配置无法实现需求,配置代码如下:

"myobj": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "optionalEnum": {
            "type": "string",
            "default": "aaa",
            "enum": [
                "aaa",
                "bbb",
                "ccc"
            ]
        }
        // 其他属性...
    }
}

当不指定optionalEnum时,会收到错误提示:optionalEnum must be one of the following: "aaa", "bbb", "ccc"。我不想将null加入枚举值(禁止用户设置为null),请问如何实现仅在属性被设置时应用枚举校验?另外,JSON Schema是否区分“未设置”和“空/Null”属性?

解决方案

你的核心问题大概率是该属性被误加入了required数组——JSON Schema默认所有properties下的属性都是非必填的,只有被列入required数组的属性才会强制要求存在。

要实现需求,只需确保optionalEnum不在myobj的required列表中。修正后的schema示例:

"myobj": {
    "type": "object",
    "additionalProperties": false,
    "required": [
        // 仅保留必须存在的属性,不要包含optionalEnum
    ],
    "properties": {
        "optionalEnum": {
            "type": "string",
            "default": "aaa",
            "enum": [
                "aaa",
                "bbb",
                "ccc"
            ]
        }
        // 其他属性...
    }
}

调整后会达到以下效果:

  • 未指定optionalEnum时,不会触发该属性的校验逻辑,Helm会自动使用默认值aaa
  • 指定optionalEnum时,会严格校验值是否在枚举范围内
  • 如果用户设置optionalEnum: null,会因type: string的规则直接校验失败,符合你禁止设置null的需求

关于“未设置”与“Null”的区分

JSON Schema完全区分这两种情况:

  • 未设置属性:对象中不存在对应的键,此时不会触发该属性的任何校验规则
  • 设置为Null:对象中存在该键且值为null,此时会按照该属性的schema规则校验(比如你的type: string会直接拒绝null值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:55:23