基于MID字段的JSON Schema嵌套数组字段校验问题排查
JSON Schema条件必填校验失效排查方案
常见问题点及修复方法
1. 条件判断的路径指向错误
很多时候if里对MID的判断是对的,但then里没正确指向嵌套数组内的目标字段。比如数组字段叫requests,必须明确约束数组的items元素,而不是直接写目标字段。
错误示例:
{ "if": { "properties": { "MID": { "const": "specificValue1" } } }, "then": { "required": ["Investigation Request Conf Reason code"] // 错误:未关联数组元素 } }
修复后:
{ "if": { "properties": { "MID": { "const": "specificValue1" } }, "required": ["MID"] // 确保MID存在才触发判断 }, "then": { "properties": { "requests": { // 替换为你的实际数组字段名 "items": { "required": ["Investigation Request Conf Reason code"] } } }, "required": ["requests"] // 确保数组本身存在 } }
2. Schema版本不支持条件校验
if/then关键字从JSON Schema draft-07才开始支持,如果你的Schema没声明版本,或用了更早的版本(比如draft-06及以前),条件判断会直接失效。
修复:在Schema顶部添加版本声明
{ "$schema": "http://json-schema.org/draft-07/schema#", // 其他Schema内容 }
3. 数组元素的约束未覆盖所有项
如果只给数组本身加了required,没给items属性设置约束,数组内的元素不会被校验。必须确保then里的规则指向数组的items,对每个数组元素生效。
4. 未确保MID字段存在就触发判断
如果输入JSON里没有MID字段,if条件会被默认视为“满足”(JSON Schema默认允许缺失字段),导致then的约束错误触发。所以要在if里加上required: ["MID"],确保只有MID存在且等于specificValue1时才校验数组字段。
5. 字段名称匹配错误
检查输入JSON和Schema里的目标字段名是否完全一致——包括空格、大小写、标点符号,比如"Investigation Request Conf Reason code"的任何一处拼写差异都会导致校验不触发。
快速验证步骤
- 确认输入JSON的MID确实是
specificValue1,且数组字段存在但元素缺失目标字段 - 简化Schema:先测试基础的MID判断是否生效(比如MID为特定值时要求另一个简单字段必填),再逐步添加数组约束
- 用本地JSON Schema校验库测试,排除工具兼容性问题
内容的提问来源于stack exchange,提问作者prk
相关产品推荐
相关产品推荐

