JSON Schema跨层级依赖:嵌套字段存在时要求上层同级字段必填
JSON Schema跨层级依赖校验解决方案
要实现嵌套层级字段触发上层同级字段必填的校验规则,可使用JSON Schema(draft-07及以上版本)内置的if-then条件校验语法,不受同级字段限制,灵活性远高于仅支持同级依赖的dependencies语法。
完整校验Schema代码
{ "type": "object", "properties": { "name": { "type": "string" }, "billing_address": { "type": "string" }, "payment_details": { "type": "object", "properties": { "credit_card": { "type": "number" } } } }, "required": ["name"], "if": { "properties": { "payment_details": { "required": ["credit_card"] } }, "required": ["payment_details"] }, "then": { "required": ["billing_address"] } }
规则说明
if分支为触发条件:仅当根对象存在payment_details字段,且payment_details对象中存在credit_card字段时,才会触发后续校验规则then分支为触发后的要求:满足if条件时,根对象必须包含billing_address字段,也可在此处补充billing_address的额外校验规则(如格式限制、长度要求等)- 不满足
if条件时(无payment_details或payment_details中无credit_card),then分支规则不生效,billing_address为非必填项
验证场景示例
- 合法场景1:存在
payment_details.credit_card,同时提供了billing_address,校验通过 - 合法场景2:不存在
payment_details.credit_card,无论是否提供billing_address,校验均通过 - 非法场景:存在
payment_details.credit_card,但未提供billing_address,校验失败
内容的提问来源于stack exchange,提问作者Sebastian Slutzky
相关产品推荐
相关产品推荐

