必须在.vscode/settings.json中配置json.schemas项,指定fileMatch(相对于工作区根的glob模式)和可访问的url(支持file:///、https://或相对路径),并确保语言模式为JSON、路径无误、Schema语法合法。

怎么让 VSCode 识别并加载你的 JSON Schema
VSCode 不会自动扫描项目里有没有 schema.json,必须显式告诉它“哪个文件该用哪个 Schema”。最可靠的方式是往 .vscode/settings.json 里加 json.schemas 配置项,而不是依赖 $schema 字段——后者只对能修改源文件的场景有效(比如你控制得了 package.json,但未必能改 CI 配置或部署模板)。
关键点:
-
fileMatch是 glob 模式,**相对于工作区根目录**,不是当前文件路径。写"**/deploy.json"能匹配任意子目录下的deploy.json;写"deploy.json"只匹配根目录下那个 -
url必须是可访问路径:支持file:///协议(注意三个斜杠)、https://、或相对路径(如"./schemas/config.schema.json") - Windows 下用
file:///时,盘符必须大写,比如"file:///D:/proj/schemas/main.schema.json",小写会 404
为什么加了配置却没提示、也不报错
校验“静默失效”是最常见的问题,VSCode 不会弹窗告诉你哪里错了,只会不干活。优先检查这三处:
- 右下角语言模式是不是
JSON?不是JSON with Comments或Plain Text。点一下切换,确认状态栏显示为JSON - 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),在 Console 里搜schema或404,看有没有路径加载失败的报错 - Schema 文件本身语法错误(比如少逗号、用了 Tab 缩进、
$ref指向的子 Schema 找不到)会导致整个链路中断。建议用ajv validate命令行工具或 jsonschemalint.com 先验证合法性
本地 Schema 有 $ref 引用时怎么配
如果主 Schema 里用了 "$ref": "./defs/common.json",那这个 common.json 也得能被 VSCode 加载——它不会自动把当前 Schema 目录当基准路径去解析相对引用。
解决方法只有两个:
- 所有被
$ref引用的子 Schema,都得放在项目里,并确保它们的路径也能被json.schemas中的fileMatch匹配到(哪怕只是空配置) - 或者统一改用
file:///绝对路径写法,比如"$ref": "file:///D:/proj/schemas/defs/common.json",避免相对路径歧义
嵌套太深或含远程 $ref(比如 https://...)会明显拖慢补全响应,编辑大型配置时容易卡住。
如何快速验证配置是否生效
别等写完一长串再试。最直接的办法是:在目标 JSON 文件里故意输一个非法字段名,比如 Schema 定义里只有 "host" 和 "port",你输入 "hostname",然后悬停看有没有 “Unknown property” 提示;再输个非数字的 "port",看是否标红。
如果没反应:
- 先删掉
json.schemas里其他条目,只留一条最简单的测试项(比如匹配test.json+ 一个极简 Schema) - 确认
test.json真的在工作区根目录下,且扩展名是.json - 重启 VSCode —— 配置变更有时需要重载窗口才生效
复杂 Schema 的调试成本其实很高,尤其是带 oneOf、深层 pattern 或大量 $ref 的时候,VSCode 语言服务器可能根本来不及响应补全请求。这种情况下,不如先用最小可用 Schema 跑通流程,再逐步叠加约束。


















