You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:24:57