Spectral规则优化:让Schema函数定位特定问题字段
Spectral规则优化:精准高亮违规字段而非整个对象
我在Spectral中配置了一条使用schema函数的规则,它能正常识别问题,但会高亮整个不符合Schema要求的对象。我希望只高亮对象里引发问题的特定字段,尝试添加field属性后,规则没报错但完全不执行。规则配置和测试示例如下:
原规则配置
if-without-then-or-else: description: if requires then or else. severity: error given: - $ - $..[?(@.if)] then: - function: schema functionOptions: schema: if: required: - if then: anyOf: - required: - then - required: - else
测试示例
{ "if": {} }
解决方案
问题出在原规则的Schema结构和given路径设置上:
- 原
given包含根路径$,会导致对整个文档重复校验,干扰错误定位 - JSON Schema的嵌套
if/then结构会让错误标记在整个对象上,而非缺失的字段
调整后的规则可精准定位到缺失的then或else字段,优化后的配置如下:
if-without-then-or-else: description: if语句必须搭配then或else severity: error given: $..[?(@.if)] then: - function: schema functionOptions: schema: type: object required: - if anyOf: - required: [then] - required: [else]
调整说明
- 简化
given路径:只定位到包含if的对象,避免根路径的冗余校验 - 重构Schema结构:去掉嵌套的
if/then,直接在顶层定义校验逻辑。当对象存在if但缺少then和else时,JSON Schema会将错误指向具体缺失的字段,Spectral就会高亮这些字段而非整个对象
测试上述规则后,违规提示会精准指向缺少的then或else字段,而不是整个包含if的对象。
内容的提问来源于stack exchange,提问作者gregsdennis
相关产品推荐
相关产品推荐

