先确认语言模式是纯json而非jsonc;再检查$schema路径是否正确(url需200响应,本地路径须用file:///协议且大小写敏感),并确保json.schemas配置在工作区settings.json中且filematch匹配准确。

JSON文件没提示?先确认语言模式是不是真正的JSON
VSCode里打开一个.json文件,右下角显示“JSON with Comments”或“JSONC”,那智能提示大概率不会触发——它不认$schema,也不加载你配的json.schemas。必须是纯“JSON”语言模式才行。
解决方法很简单:点击右下角语言标识 → 搜索“JSON” → 选中第一个“JSON”(不是带C的那个)。如果文件没后缀或后缀不标准(比如config),就手动切;也可以在.vscode/settings.json里加这条强制绑定:
"files.associations": {
"config": "json"
}
常见坑:改完设置没重启编辑器标签页,旧文件仍沿用旧语言模式;或者文件已打开状态下切换语言,$schema字段不会自动生效,得保存或重新打开。
用$schema字段最直接,但路径写错就完全静默失效
在JSON文件顶部加$schema是最快启用校验的方式,但VSCode对路径协议极其敏感:
- 远程URL(如
"$schema": "https://json.schemastore.org/package.json")必须返回HTTP 200且Content-Type为application/schema+json或application/json - 本地文件必须用
file:///协议,Windows下盘符大写、三个斜杠缺一不可:"$schema": "file:///D:/myproject/schemas/config.schema.json" - 相对路径(如
"$schema": "./schemas/config.schema.json")不被支持,VSCode会忽略它,也不报错
验证是否生效:打开开发者工具(Ctrl+Shift+P → “Developer: Toggle Developer Tools”),切到Console标签,如果有Failed to load schema from …就是路径问题;没日志也不代表成功——再检查右下角语言模式和文件是否保存过。
json.schemas配置写在哪儿?工作区级优先于用户级
如果你不能改JSON文件本身(比如是别人维护的构建配置),就得靠VSCode设置绑定Schema。关键点在于配置位置:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 用户级设置(全局):
~/.vscode/settings.json,影响所有项目 - 工作区级设置(推荐):
[项目根目录]/.vscode/settings.json,只对当前项目生效,且优先级更高
配置示例(放在工作区.vscode/settings.json中):
"json.schemas": [
{
"fileMatch": ["package.json"],
"url": "https://json.schemastore.org/package.json"
},
{
"fileMatch": ["**/my-config.json"],
"url": "file:///Users/me/project/schemas/my-config.schema.json"
}
]
注意:fileMatch是glob模式,匹配的是**相对于工作区根目录的路径**。比如项目结构是/project/src/my-config.json,那"**/my-config.json"能匹配,但"src/my-config.json"就不能——除非你明确写成"src/my-config.json"。
本地Schema文件语法错一点,整个校验链就断掉
自定义Schema不是写完扔进去就行。VSCode的JSON语言服务器解析Schema时非常严格:
- 少一个逗号、多一个Tab缩进、用了中文引号,都会导致Schema加载失败,且没有任何提示,只是补全和校验全消失
- 含
$ref引用的Schema,每个被引用的子文件也必须能被VSCode访问(同样要file:///或URL可直达) - 大型Schema(尤其深度嵌套
oneOf或复杂pattern)会让语言服务器响应变慢,输入时卡顿、hover提示延迟几秒都算正常
建议动作:用ajv validate命令行工具或在线校验器(如jsonschemavalidator.net)先跑一遍Schema本身,确保它语法合法、结构完整。别等到VSCode里不提示了才回头查Schema——那已经是最晚的排查节点。
真正容易被忽略的,是Schema里的description和default字段。它们不参与校验,但决定了你在VSCode里悬停看到什么、补全列表里排第几。没写description,提示就是干巴巴的类型名;没设default,哪怕字段是必填的,也不会在补全里标星或置顶。










