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

如何为JSON Schema draft-07基于内网子页面JSON属性创建枚举?

JSON Schema Draft-07 动态枚举引用问题解答

先纠正你的第一个示例错误

你当前的写法没法实现预期效果,问题出在两点:

  1. $ref 只能用来引用其他JSON Schema定义,不能直接拉取普通JSON数据里的属性值当枚举用。
  2. const 要求值是固定字面量,嵌套$ref完全不符合Schema语法规范。

假设你的 teams.json 是这样的普通JSON数据:

[
  {"slug": "frontend", "name": "前端团队"},
  {"slug": "backend", "name": "后端团队"}
]

要让teams数组的元素只能是这些slug值,你没法直接通过$ref动态引用,必须把这些值预提取出来,写成enum数组:

"teams": {
  "description": "An array of teams in the inventory",
  "type": "array",
  "items": {
    "type": "string",
    "enum": ["frontend", "backend"]
  }
}

如果不想手动维护,可以写个脚本定时拉取内网JSON数据,自动生成这个enum数组嵌入Schema。

关于多子页面的引用问题

你想通过"$ref": "https://mycompany.com/inventory/teams.json/*/#/slug"这种通配符写法引用所有子页面的slug,完全不可行,原因有两个:

  1. JSON Schema的$ref不支持通配符匹配多个URL,只能指向明确的单个Schema资源。
  2. 核心问题还是一样:即使能定位到子页面的JSON数据,Draft-07也没有原生能力从外部数据中动态提取值生成枚举。

可行的替代方案

  • 批量预提取+脚本生成:写脚本遍历所有子页面的URL,拉取每个页面的JSON数据,提取所有slug值合并成一个数组,再写入Schema的enum中。
  • 升级Schema版本:如果可以升级到JSON Schema Draft 2020-12,结合$dynamicRef和自定义工具链,能实现更灵活的动态引用,但依然需要工具支持,原生Schema校验器本身不会主动拉取外部数据生成枚举。

内容的提问来源于stack exchange,提问作者pinkfloydfan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:20:00