如何让本地JSON Schema的fileMatch验证在编辑时生效?
VS Code工作区JSON Schema自动关联失效问题解决
问题场景
尝试通过VS Code工作区配置,为所有folder/*.foo.json文件自动关联根目录下的myschema.json作为验证Schema,但仅显式指定$schema字段的文件能触发验证错误,未指定的文件无任何提示。
环境与配置细节
- VS Code版本:1.76.0
- 工作区文件结构:
工作区根目录/ ├─ .vscode/ │ └─ settings.json ├─ myschema.json └─ folder/ ├─ no_schema_specified.foo.json └─ schema_specified.foo.json
1. .vscode/settings.json 配置
{ "json.schemas": [ { "fileMatch": ["folder/*.foo.json"], "url": "./myschema.json" } ] }
2. myschema.json 定义
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["name", "age"] }
3. 测试文件内容
folder/no_schema_specified.foo.json(未指定$schema):
{ "name": "Alice", "age": "nine" }
folder/schema_specified.foo.json(显式指定$schema):
{ "$schema": "../myschema.json", "name": "Bob", "age": "nine" }
问题原因
- 相对路径解析问题:VS Code工作区配置中,
url字段的相对路径基准可能未正确指向工作区根目录,导致Schema文件无法被正确加载。 - Schema缓存干扰:VS Code会缓存已加载的Schema信息,旧缓存可能阻止新的关联规则生效。
- 工作区识别问题:若未打开完整的工作区根目录(仅打开
folder文件夹),配置中的路径匹配会失效。
解决方案
1. 修正Schema路径配置
将settings.json中的url替换为基于工作区变量的绝对路径,确保路径解析准确:
{ "json.schemas": [ { "fileMatch": ["folder/*.foo.json"], "url": "${workspaceFolder}/myschema.json" } ] }
2. 清除Schema缓存
- 打开命令面板(快捷键:Ctrl+Shift+P / Cmd+Shift+P)
- 输入并执行
JSON: Clear Schema Cache - 重启VS Code
3. 确认工作区打开方式
确保打开的是包含.vscode文件夹的工作区根目录,而非单独打开folder子文件夹。
验证
完成上述操作后,重新打开no_schema_specified.foo.json,其中age字段的字符串值"nine"会触发VS Code的JSON验证错误,提示类型不匹配。
内容的提问来源于stack exchange,提问作者alx9r
相关产品推荐
相关产品推荐

