JSON Schema校验异常:含D的实例未通过oneOf规则校验
问题原因及解决方法
问题根源
你的JSON Schema中oneOf的两个分支都没有明确指定必填字段,导致测试实例同时满足了两个分支的校验规则:
- 第一个分支仅定义了
B和C的类型约束,但没有要求这两个字段必须存在,所以没有B、C的实例也能通过该分支的校验; - 第二个分支定义了
D的类型约束,同样没要求D必须存在,但实例里的D符合类型要求,所以也能通过该分支的校验。
而oneOf的规则是实例必须且只能满足其中一个分支,当实例同时满足两个分支时,校验自然失败。
修正后的Schema
给oneOf的两个分支分别添加required关键字,明确各自的必填字段:
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.com/schemas/test", "type": "object", "properties": { "A": { "type": "string" } }, "oneOf": [ { "properties": { "B": { "type": "integer" }, "C": { "type": "boolean" } }, "required": ["B", "C"] }, { "properties": { "D": { "type": "string" } }, "required": ["D"] } ] }
验证说明
修正后:
- 当实例包含
D时,仅满足第二个分支(第一个分支要求必须有B和C,实例不满足),符合oneOf规则; - 当实例同时包含
B和C时,仅满足第一个分支(第二个分支要求必须有D,实例不满足),符合规则; - 若实例同时包含
B、C和D,则会同时满足两个分支,触发oneOf校验失败,这也符合你预期的(B且C)或D的互斥逻辑。
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

