如何在JSON Schema中引用数组内的不同$defs定义对象?
JSON Schema 数组引用多个定义对象的正确写法
你之前的写法有两个问题:一是把items设为数组是用来定义元组结构的(要求数组第1个元素匹配第一个schema,第2个匹配第二个,以此类推),不是用来表示元素可以是任意指定类型;二是数组里的对象重复用$ref键,这在JSON里不合法,后面的键会覆盖前面的。
要实现数组元素是你定义的三个对象之一,正确的做法是用anyOf(或oneOf,看需求)包裹多个$ref,把它作为items的值:
{ "type": "array", "items": { "anyOf": [ {"$ref": "#/$defs/Obj1"}, {"$ref": "#/$defs/Obj2"}, {"$ref": "#/$defs/Obj3"} ] }, "$defs": { "Obj1": { /* 你的Obj1定义内容 */ }, "Obj2": { /* 你的Obj2定义内容 */ }, "Obj3": { /* 你的Obj3定义内容 */ } } }
额外说明
- 如果要求每个元素只能匹配其中一个对象(不能同时符合多个),把
anyOf换成oneOf就行。 - 要是你真的需要固定顺序的元组(比如数组第一个元素必须是Obj1,第二个必须是Obj2,第三个必须是Obj3,不能多也不能少),可以这么写:
{ "type": "array", "items": [ {"$ref": "#/$defs/Obj1"}, {"$ref": "#/$defs/Obj2"}, {"$ref": "#/$defs/Obj3"} ], "additionalItems": false, "$defs": { /* 你的对象定义 */ } }
内容的提问来源于stack exchange,提问作者rhavin
相关产品推荐
相关产品推荐

