如何配置JSONSchema实现可选校验:允许空对象但拒绝半填充字段数据
解决方案
修改后的完整JSON Schema
{ "$id": "https://example.com/person.schema.json", "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Person", "type": "object", "properties": { "firstName": { "type": "string", "description": "The person's first name." }, "lastName": { "type": "string", "description": "The person's last name." }, "age": { "description": "Age in years which must be equal to or greater than zero.", "type": "integer", "minimum": 0 } }, "anyOf": [ { "maxProperties": 0 }, { "required": ["firstName", "lastName", "age"] } ] }
修改逻辑说明
核心修改是移除原Schema全局的required配置,新增anyOf分支校验规则,只需命中任意一条分支即可通过校验:
- 第一条分支
maxProperties: 0:限制对象只能为空,满足空对象可正常通过的需求 - 第二条分支保留原必填规则:要求
firstName、lastName、age三个字段必须同时存在,只要对象包含任意字段,就必须同时填齐三个字段,否则校验失败,满足半填充数据拒绝的需求
校验效果验证
- 可通过校验的场景:
- 空对象
{} - 三个字段完整填写的对象:
{ "firstName": "John", "lastName": "Doe", "age": 21 }
- 空对象
- 会被拒绝的场景:
- 仅填写1个字段的对象(如仅填
firstName的示例) - 仅填写任意2个字段的对象
- 仅填写1个字段的对象(如仅填
内容的提问来源于stack exchange,提问作者Işık Kaplan
相关产品推荐
相关产品推荐

