JSON Schema校验:If/Then/Else语句数组多元素规则适配问题
问题分析与解决方案
你的JSON Schema逻辑存在偏差:当前的if条件要求数组所有元素的afs_emp_rep_Capacity都包含Current director of licensee,才会触发then规则(要求所有元素必须有afs_emp_rep_verify)。但你的实际需求是针对数组中每个独立元素——只要元素的afs_emp_rep_Capacity包含指定值,就必须有afs_emp_rep_verify字段,和其他元素无关。
修正后的Schema
{ "allOf": [ { "if": { "properties": { "report_body": { "properties": { "licensees_schemes_rep_involved": { "properties": { "report_submit_licensee": { "const": "Yes" } }, "required": ["report_submit_licensee"] } }, "required": ["licensees_schemes_rep_involved"] } }, "required": ["report_body"] }, "then": { "properties": { "report_body": { "properties": { "afs_employee_director_rep": { "items": { "if": { "properties": { "afs_emp_rep_Capacity": { "contains": { "const": "Current director of licensee" } } }, "required": ["afs_emp_rep_Capacity"] }, "then": { "required": ["afs_emp_rep_verify"] } } } } } } } } ] }
逻辑说明
- 外层条件控制:只有当
report_submit_licensee为Yes时,才会对afs_employee_director_rep数组的元素应用校验规则。 - 元素级独立校验:数组的每个元素单独判断:
- 如果元素的
afs_emp_rep_Capacity包含Current director of licensee,则强制要求该元素必须有afs_emp_rep_verify字段。 - 不满足Capacity条件的元素,不受该字段的必填限制。
- 如果元素的
校验结果验证
- 第一个测试Payload:数组元素符合Capacity条件但缺少
afs_emp_rep_verify,会触发校验失败,符合预期。 - 第二个测试Payload:第一个元素符合Capacity条件且缺少
afs_emp_rep_verify,会被检测出错误;第二个元素不符合条件,无需校验该字段,因此整个Payload会被正确判定为校验失败,符合你的实际需求。
内容的提问来源于stack exchange,提问作者Dave G
相关产品推荐
相关产品推荐

