如何编写JSON Schema验证Foo对象?属性需为枚举或Foo实例
编写支持嵌套Foo对象与枚举值的JSON Schema
没问题,我来帮你搞定这个需求!你要的是一个递归结构的JSON Schema,允许Foo对象包含任意数量的属性,每个属性值要么是指定的枚举值(比如A或B),要么是另一个Foo实例。
完整的JSON Schema示例
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": { "oneOf": [ { "enum": ["A", "B"] }, { "$ref": "#" } ] } }
关键部分解释
additionalProperties: 这个关键字用来定义对象所有未明确列出的属性的规则,正好适配你“任意数量属性”的要求。oneOf: 确保每个属性值只能二选一——要么匹配枚举规则,要么匹配当前Schema的递归引用(也就是另一个Foo实例)。"$ref": "#": 这是实现嵌套验证的核心,#指向当前Schema本身,完美支持多层嵌套的Foo对象。- 枚举定义:
{"enum": ["A", "B"]}明确限定了属性值只能是A或B,后续要扩展枚举值直接修改这个数组就行。
验证通过的示例
你提供的这个对象可以被上面的Schema成功验证:
{ "test": "A", "test1": "B", "test2": { "test4": "A", "test5": { "test6": "B" } } }
额外优化建议
如果需要强制对象至少包含一个属性,可以在Schema里加上"minProperties": 1关键字;要是有其他枚举值扩展需求,直接更新enum数组内容即可。
内容的提问来源于stack exchange,提问作者NRaf
相关产品推荐
相关产品推荐

