vscode 的 json schema 校验是实时被动触发的,关键在于正确配置语言模式、filematch 路径、file:/// 协议的本地 schema 地址及工作区 settings.json 中的 json.schemas,而非快捷键。

VSCode 本身不提供“一键触发 Schema 校验”的快捷键,校验是实时、被动发生的——你改完就立刻报错或提示,不需要手动点。真正能提速的,是让校验**立刻生效**、**提示精准出现**、**补全快速弹出**。关键不在按哪个键,而在配置和操作是否踩中 VSCode 的触发条件。
为什么改了 $schema 没反应?检查语言模式和保存状态
最常见的情况:你在 config.json 里写了 "$schema": "./schema.json",但右下角显示的是 JSONC 或 Plain Text ——这时无论路径多对,校验和补全都完全静默。
- 必须点击右下角语言标识 → 搜索
JSON→ 选第一个纯JSON(不是带 C 的) - 改完语言模式后,必须保存文件或重新打开,否则旧缓存继续生效
- 如果文件没后缀(比如叫
deploy),仅靠$schema不会触发,得在.vscode/settings.json里加"files.associations": { "deploy": "json" }
json.schemas 配置写在哪?工作区 settings.json 才可靠
很多人把 json.schemas 写进用户级 settings.json,结果只对部分文件生效——因为 fileMatch 是相对于工作区根目录匹配的,用户设置没有“工作区上下文”。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 务必在项目根目录下的
.vscode/settings.json中配置,例如: { "json.schemas": [ { "fileMatch": ["**/api-config.json"], "url": "./schemas/api.schema.json" } ] }-
fileMatch支持 glob,但注意:"**/config.json"匹配所有子目录下的config.json,而"config.json"只匹配项目根目录的 - 配置完不用重启 VSCode,但已打开的文件要 关闭再重开 才加载新规则
本地 Schema 路径怎么写才不报错?file:/// 是唯一稳的方案
相对路径(如 "./schema.json")在 $schema 字段里完全被忽略;HTTP URL 要求服务返回 Content-Type: application/schema+json,否则控制台报 Failed to load schema。
- Windows 下正确写法:
"$schema": "file:///D:/myproject/schemas/config.schema.json"(三个斜杠,盘符大写) - macOS/Linux:
"$schema": "file:///Users/me/project/schemas/config.schema.json"(同样三斜杠,绝对路径) - 如果 Schema 里用了
$ref引用其他文件,那些被引用的子 schema 也必须能通过file:///或可访问 URL 加载,否则校验静默失败 - 验证是否加载成功:按
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ 切到 Console,看有没有 Failed 日志
补全和错误提示卡顿?关掉无关插件,别用 Prettier 格式化 JSON
VSCode 内置 JSON 语言服务对格式敏感。如果你装了 Prettier 并设为 JSON 默认格式化器,它可能把合法但“不美观”的结构(如换行缩进不一致)当成错误,干扰 Schema 提示。
- 确保
editor.defaultFormatter对json语言是vscode.json-language-features,不是esbenp.prettier-vscode - 临时禁用所有非必要 JSON 相关插件(比如 “JSON Crack”、“JSON Tools”),只留原生支持,排除干扰
- 如果补全延迟明显,检查
json.validate.enable是否为true(默认开启),它控制语法校验开关,关了会影响 Schema 关联时机
真正卡住人的从来不是快捷键记不住,而是 $schema 路径写对了但语言模式错了、fileMatch 看似匹配却因工作区路径理解偏差而失效、或者子 schema 的 $ref 路径没同步改成 file:/// 协议——这些细节不排查,光按快捷键毫无意义。










