如何用JSON Schema验证指定属性缺失及prop1仅含空白字符
符合要求的JSON Schema实现方案
核心验证规则回顾
仅当满足以下所有条件时,JSON对象验证通过:
prop1必须存在,且其值仅包含空白字符(空格、制表符、换行符等)prop2和prop3必须完全缺失
方案一:严格限制属性范围
该方案直接禁止除prop1外的任何其他属性,完全匹配需求场景:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["prop1"], "properties": { "prop1": { "type": "string", "pattern": "^\\s*$" } }, "additionalProperties": false, "maxProperties": 1 }
关键字说明
required: ["prop1"]:强制要求prop1必须存在,满足规则基础前提prop1.pattern: "^\\s*$":用正则匹配仅含空白字符的字符串(包括空字符串),确保prop1的值符合要求additionalProperties: false:禁止出现Schema未定义的属性,直接拦截prop2、prop3这类额外属性maxProperties: 1:限制对象只能有1个属性,进一步确保不会出现prop2或prop3
方案二:精准拦截指定属性
如果允许对象包含prop1之外的其他属性(仅需确保prop2、prop3缺失),可以用not+anyOf组合实现:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["prop1"], "properties": { "prop1": { "type": "string", "pattern": "^\\s*$" } }, "not": { "anyOf": [ { "required": ["prop2"] }, { "required": ["prop3"] } ] } }
关键字说明
not.anyOf:只要anyOf中任意一个条件成立(即prop2存在,或prop3存在),验证就会失败,刚好实现"prop2、prop3均缺失"的要求
验证效果测试
针对你提供的测试数组:
- 第一个对象包含
prop2和prop3,两种Schema都会验证失败 - 第二个对象仅含符合要求的
prop1,两种Schema都会验证通过
内容的提问来源于stack exchange,提问作者priyanka nath
相关产品推荐
相关产品推荐

