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

布尔类型属性引发JSON Schema验证失败问题求助

解决JSON Schema布尔属性场景下的验证问题

问题分析

核心需求是基于servicenowEnabled的布尔值严格控制字段可用性:

  • 当servicenowEnabled为true时,必须同时提供servicenowBaseUrl、servicenowClientId、servicenowClientSecret
  • 当servicenowEnabled为false时,禁止出现上述三个字段,仅保留servicenowEnabled本身

你提供的测试用例验证失败,是因为servicenowEnabled设为false后仍包含其他三个字段,违反了严格控制规则。

正确的JSON Schema写法

使用if/then/else关键字组合即可实现该逻辑,无需用not替代else(大概率是你之前的if/then/else写法有误):

{
  "type": "object",
  "properties": {
    "servicenowEnabled": {
      "type": "boolean"
    },
    "servicenowBaseUrl": {
      "type": "string",
      "format": "uri"
    },
    "servicenowClientId": {
      "type": "string"
    },
    "servicenowClientSecret": {
      "type": "string"
    }
  },
  "required": ["servicenowEnabled"],
  "if": {
    "properties": {
      "servicenowEnabled": {
        "const": true
      }
    }
  },
  "then": {
    "required": ["servicenowBaseUrl", "servicenowClientId", "servicenowClientSecret"]
  },
  "else": {
    "not": {
      "required": ["servicenowBaseUrl", "servicenowClientId", "servicenowClientSecret"]
    },
    "additionalProperties": false
  }
}

规则说明

  1. 基础定义:声明所有可能的字段类型,同时强制servicenowEnabled为必填项。
  2. if条件:当servicenowEnabled严格等于true时,触发then规则。
  3. then规则:要求三个关联字段必须存在。
  4. else规则:
    • not.required确保三个关联字段不能出现在JSON中;
    • additionalProperties: false防止出现未定义的额外字段(可根据实际需求调整)。

测试验证

  • 你提供的测试用例会触发else中的not.required验证失败,符合严格控制的预期逻辑;
  • 若将servicenowEnabled改为true且保留三个关联字段,可正常通过验证;
  • 若servicenowEnabled为false且仅保留该字段,也可通过验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:57:53