JSON Schema 是用于定义 JSON 文件结构的规范,VSCode 依赖它实现语法校验、hover 提示和自动补全;需在 settings.json 中配置 json.schemas 指定 fileMatch 和 schema URL 才能生效。

JSON Schema 是什么,为什么 VSCode 要靠它补全
VSCode 本身不理解你的 config.json 里哪些字段合法、哪些值可选、哪些是必填——它只当你是纯文本。一旦你给这个 JSON 文件关联一个 schema,VSCode 就能基于结构定义做实时校验、hover 提示、自动补全甚至错误高亮。这不是“锦上添花”,而是把 JSON 从“靠人肉记文档”变成“IDE 帮你防错”。
关键前提是:VSCode 必须知道哪个 schema 对应哪个文件。它不自动猜,得你明确告诉它。
怎么让 VSCode 为某个 JSON 文件自动加载 schema
最常用也最可靠的方式是通过 settings.json 配置 json.schemas 项:
{
"json.schemas": [
{
"fileMatch": ["package.json"],
"url": "https://json.schemastore.org/package.json"
},
{
"fileMatch": ["./config.json"],
"url": "./schema/config.schema.json"
}
]
}
-
fileMatch 支持 glob 模式,但注意:路径是相对于工作区根目录的,"config.json" 会匹配所有同名文件,而 "./config.json" 只匹配根目录下的那个
-
url 可以是远程 URL(如 schemastore),也可以是本地路径(必须以 ./ 或 ../ 开头,不能用绝对路径)
- 如果本地 schema 文件没被识别,检查它是否真在指定路径,且 VSCode 没缓存旧配置(改完
settings.json 后不用重启,但保存后要等几秒生效)
手写 schema 太麻烦?用 JSON Schema Generator 快速反推
你已经有现成的 config.json 示例,不想从零写 schema?可以用工具自动生成骨架:
- 在线工具:https://www.php.cn/link/e07e906faae382a0abbf22583949f917(粘贴 JSON 即得 schema,注意勾选 “Require all properties” 和 “Use default values” 选项更贴近实际)
- 命令行工具:
npx @json-schema-tools/cli generate ./config.json > schema/config.schema.json
- VSCode 插件:
JSON Schema Generator(右键 JSON 文件 → “Generate Schema”)
fileMatch 支持 glob 模式,但注意:路径是相对于工作区根目录的,"config.json" 会匹配所有同名文件,而 "./config.json" 只匹配根目录下的那个url 可以是远程 URL(如 schemastore),也可以是本地路径(必须以 ./ 或 ../ 开头,不能用绝对路径)settings.json 后不用重启,但保存后要等几秒生效)config.json 示例,不想从零写 schema?可以用工具自动生成骨架:
- 在线工具:https://www.php.cn/link/e07e906faae382a0abbf22583949f917(粘贴 JSON 即得 schema,注意勾选 “Require all properties” 和 “Use default values” 选项更贴近实际)
- 命令行工具:
npx @json-schema-tools/cli generate ./config.json > schema/config.schema.json - VSCode 插件:
JSON Schema Generator(右键 JSON 文件 → “Generate Schema”)
生成的 schema 是起点,不是终点。常见问题包括:
- 数组项类型常被识别成
any,需手动改成"type": "array", "items": { "type": "string" } - 枚举值(如
"env": ["dev", "prod"])不会自动转成"enum",得补上 - 描述性字段
"description"不加的话,hover 提示就只剩类型,没业务语义
schema 写好了但没提示?排查这三处
最常卡在这几个地方,而不是 schema 本身写错了:
- 确认
json.schemas配置已写进settings.json(用户级 or 工作区级),且没有语法错误(多逗号、少引号) - 打开的 JSON 文件必须保存为
.json后缀,且未被 VSCode 当作 plain text 打开(右下角状态栏看语言模式,应为 “JSON”) - schema 文件里如果有
$ref引用外部定义,本地路径必须用./开头,且引用文件存在;远程$ref在离线时会失效,导致整个 schema 不加载
复杂点在于:schema 的 additionalProperties: false 会严格禁止未声明字段,但如果你只是想“提示已知字段”,别急着加这一条——它会让 VSCode 把所有额外字段标红,反而干扰开发节奏。


















