如何编写JSON Schema实现依赖字段值的嵌套结构条件校验
条件必填场景JSON Schema实现方案
你可以使用JSON Schema的if/then/else条件逻辑关键字实现该需求,完整的校验Schema如下:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["kind"], "properties": { "kind": { "type": "string" }, "contact": { "type": "object", "properties": { "mail": { "type": "string", "format": "email" }, "name": { "type": "string" }, "street": { "type": "string" } }, "additionalProperties": false } }, "if": { "properties": { "kind": { "const": "new" } } }, "then": { "required": ["contact"], "properties": { "contact": { "required": ["mail"] } } } }
规则匹配说明
- 通用基础校验:全局定义
kind为必填字符串字段,contact内部所有字段的类型校验统一放在公共属性定义中,只要请求中出现对应字段就会自动校验类型,无需重复定义。 kind不为"new"场景:if条件不命中,不会触发then分支的额外约束,此时contact为非必填项,若提交时携带contact对象,仅校验内部字段的类型,不校验必填性,符合需求。kind为"new"场景:if条件命中,触发then分支的约束,强制要求contact为必填项,且contact内部的mail为必填项,其余字段无必填要求但仍会校验类型,符合需求。
内容的提问来源于stack exchange,提问作者Markus Bach
相关产品推荐
相关产品推荐

