布尔类型属性引发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 } }
规则说明
- 基础定义:声明所有可能的字段类型,同时强制
servicenowEnabled为必填项。 - if条件:当
servicenowEnabled严格等于true时,触发then规则。 - then规则:要求三个关联字段必须存在。
- else规则:
not.required确保三个关联字段不能出现在JSON中;additionalProperties: false防止出现未定义的额外字段(可根据实际需求调整)。
测试验证
- 你提供的测试用例会触发
else中的not.required验证失败,符合严格控制的预期逻辑; - 若将
servicenowEnabled改为true且保留三个关联字段,可正常通过验证; - 若
servicenowEnabled为false且仅保留该字段,也可通过验证。
内容的提问来源于stack exchange,提问作者bansal
相关产品推荐
相关产品推荐

