如何编写Schema约束属性匹配任一子Schema?解决jsonschema报错
正确的JSON Schema编写方案
你的错误根源在于把oneOf关键字放在了properties内部,这违反了JSON Schema的规范——oneOf是顶层关键字,必须和properties、type等关键字同级。另外原Schema没有明确区分两种结构的必填字段,也没处理专属字段的排他性。
以下是可以正确验证两种结构的Schema:
{ "type": "object", "required": ["name", "step"], "properties": { "name": { "type": "string" }, "step": { "type": "number" } }, "oneOf": [ { "required": ["start", "stop"], "properties": { "start": { "type": "number" }, "stop": { "type": "number" } }, "additionalProperties": false }, { "required": ["center", "span"], "properties": { "center": { "type": "number" }, "span": { "type": "number" } }, "additionalProperties": false } ] }
关键说明:
type: "object":明确待验证的是JSON对象required: ["name", "step"]:指定两种结构共有的必填字段properties:定义公共字段的类型规则oneOf:限制只能匹配其中一个分支的规则:- 第一个分支:强制要求存在
start和stop,且禁止出现其他未定义字段(additionalProperties: false),确保不会混入center/span - 第二个分支:强制要求存在
center和span,同样禁止额外字段,确保不会混入start/stop
- 第一个分支:强制要求存在
验证效果:
- 第一种带
start/stop的结构会匹配第一个分支,通过验证 - 第二种带
center/span的结构会匹配第二个分支,通过验证 - 若同时出现两类专属字段、缺少必填字段,或者出现未定义字段,都会触发验证失败
内容的提问来源于stack exchange,提问作者Ziyuan
相关产品推荐
相关产品推荐

