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

如何在Draft-07版本的JSON Schema中自定义可全局使用的关键字(词汇)

如何在Draft-07版本的JSON Schema中自定义可全局使用的关键字(词汇)

我完全懂你的处境——VS Code目前只支持Draft-07,而新版JSON Schema那套$vocabulary、$dynamicAnchor的词汇扩展机制在Draft-07里根本没有,想自定义全局关键字确实有点卡壳。下面给你梳理一套在Draft-07里可行的实现方案:

核心思路:元模式扩展+复用引用

Draft-07没有官方的词汇系统,所以咱们得通过扩展基础元模式的方式,把自定义关键字的规则整合进去,让VS Code能识别并验证这些关键字。

1. 编写自定义关键字的元模式

先给你的自定义关键字定义语法规则,比如假设你要做一个x-required-if关键字(用来指定某个字段在特定条件下必填),可以写这样的元模式文件(比如命名为custom-keywords.meta.json):

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "x-required-if": {
      "type": "object",
      "properties": {
        "condition": { "type": "string", "description": "触发必填的条件表达式" },
        "field": { "type": "string", "description": "需要必填的字段名" }
      },
      "required": ["condition", "field"]
    }
  }
}

这里用x-前缀是Draft-07的扩展惯例,避免和官方关键字冲突。

2. 扩展Draft-07的基础元模式

你需要创建一个扩展版的Draft-07元模式,把上面的自定义关键字规则合并进去。可以用allOf来组合官方元模式和你的自定义元模式,比如命名为extended-draft-07.meta.json:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "allOf": [
    { "$ref": "http://json-schema.org/draft-07/schema#" },
    { "$ref": "./custom-keywords.meta.json" }
  ]
}

如果不想用引用,也可以直接拷贝官方Draft-07元模式的内容,然后在它的properties字段里直接添加自定义关键字的定义。

3. 在业务Schema中使用扩展元模式

现在你的业务Schema就可以指定使用这个扩展后的元模式了,比如:

{
  "$schema": "./extended-draft-07.meta.json",
  "type": "object",
  "properties": {
    "isPremium": { "type": "boolean" },
    "discountCode": { "type": "string" }
  },
  "x-required-if": {
    "condition": "isPremium === true",
    "field": "discountCode"
  }
}

4. 配置VS Code识别扩展元模式

最后要让VS Code知道用你的扩展元模式来验证文件,在项目的.vscode/settings.json里添加配置:

{
  "json.schemas": [
    {
      "fileMatch": ["*.schema.json"], // 匹配你的业务Schema文件
      "url": "./extended-draft-07.meta.json"
    }
  ]
}

注意事项

  • 语法vs语义验证:Draft-07的这套方式只能帮你做语法验证(检查自定义关键字的格式是否符合规则),如果要实现真正的语义校验(比如判断discountCode在isPremium为true时是否真的必填),你需要自己编写额外的验证逻辑——VS Code默认的验证器只支持官方关键字的语义判断。
  • 关键字命名:坚持用x-前缀,这是Draft-07的扩展规范,能避免和未来的官方关键字冲突。

备注:内容来源于stack exchange,提问作者dlukacic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:48:08