如何优化JSON Schema数组条件校验的错误提示准确性?
优化JSON Schema数组校验的错误提示精准度
要解决错误提示冗余、定位不准的问题,核心是缩小校验触发范围,给每个约束加明确标识,避免无差别校验。具体调整方法如下:
精准触发校验逻辑
用if/then结构限定校验条件:只有当数组包含{"item":"include","value":"yes"}时,才启用后续的强制项校验。这样不会在不满足触发条件时执行多余检查,减少无关错误。针对单个项做精确校验
对需要强制存在的项,用contains指定精确匹配规则:- 对
{"item":"1","value":"1"},直接用contains匹配完整对象,避免模糊的数组项校验牵连其他元素; - 对
{"item":"2"}的项,单独用contains嵌套value的枚举约束,让校验器只盯着该项的value字段检查,不会触发其他无关项的错误。
- 对
给校验规则加明确标识
为每个contains块添加title和description,让错误提示直接说明问题所在,比如给item=2的校验加描述:“item为'2'的项,value必须是'A'/'B'/'C'之一”,这样错误信息会精准指向问题点。移除冗余校验规则
删除全局范围内不必要的数组项约束,只保留和触发条件强相关的逻辑,避免校验器做无意义的检查。
调整后的示例Schema
{ "type": "array", "if": { "contains": { "type": "object", "properties": { "item": {"const": "include"}, "value": {"const": "yes"} }, "required": ["item", "value"] } }, "then": { "allOf": [ { "contains": { "type": "object", "properties": { "item": {"const": "1"}, "value": {"const": "1"} }, "required": ["item", "value"], "title": "必填项item=1", "description": "必须包含{item:'1', value:'1'}的项" } }, { "contains": { "type": "object", "properties": { "item": {"const": "2"}, "value": {"enum": ["A", "B", "C"]} }, "required": ["item", "value"], "title": "item=2的value校验", "description": "item为'2'的项,value必须是'A'/'B'/'C'之一" } } ] } }
这个Schema只会在触发条件满足时,检查两个必填项。如果待校验JSON里item=2的value是Z,校验器只会返回一条关于该项value不符合枚举的错误,同时如果item=1的项缺失,也会单独提示,不会产生冗余的错误信息。
内容的提问来源于stack exchange,提问作者Andy B
相关产品推荐
相关产品推荐

