JSON Schema负常量设置及端口oneOf校验异常问题求助
JSON Schema oneOf校验异常排查方案
问题分析
你遇到的错误明显反常:21915不可能匹配const: -1规则,说明要么是配置笔误,要么是校验器存在bug,或者schema引用路径错误。
排查步骤
- 检查const规则写法:确认你的校验规则中
{"const": -1}没有笔误,比如误写成{"minimum": -1}这类会包含正整数的规则。 - 核对schema文件引用:报错信息里出现的是
schemaDef.json#/port,但你的校验规则里写的是schemaFile.json#/port,确认这两个文件是否为同一文件,或者是否存在路径引用错误导致加载了错误的schema规则。 - 切换校验器验证:用标准的JSON Schema校验器(比如ajv-cli)重新测试,排除当前校验器的bug:
- 安装ajv-cli:
npm install -g ajv-cli - 确保
schemaFile.json内容正确:{ "port": { "type": "number", "multipleOf": 1.0, "minimum": 1, "maximum": 65535 } } - 创建主校验schema(
main-schema.json):{ "oneOf": [ {"$ref": "schemaFile.json#/port"}, {"const": -1}, {"type": "null"} ] } - 测试21915:
echo 21915 | ajv validate -s main-schema.json
正常情况下会返回valid,不会出现同时匹配两个规则的错误。
- 安装ajv-cli:
补充说明
你的oneOf规则逻辑本身是合理的:三个分支(1-65535整数、-1、null)完全互斥,正常校验器不会出现同时匹配的情况。重点排查配置细节和校验器本身的问题。
内容的提问来源于stack exchange,提问作者Alberto J Lorenzo Rosario
相关产品推荐
相关产品推荐

