vscode json校验与格式化必须语言模式为json,右下角非json则功能失效;保存自动格式化不等于语法检查,后者依赖实时语言服务而非保存行为。

右下角显示不是JSON就别指望校验生效
VSCode 的 JSON 校验和格式化功能完全依赖语言模式识别。如果右下角状态栏显示的是 Plain Text、JSON with Comments 或 JavaScript,那 json.validate.enable 和 Shift+Alt+F 都不会起作用——它根本没把你当 JSON 文件看。
常见诱因包括:
- 文件没有
.json扩展名(比如叫config或.env.json) - 粘贴内容后 VSCode 自动 fallback 到
Plain Text模式 -
.vscode/settings.json中错误配置了files.associations,把本该是 JSON 的后缀映射给了其他语言
解决方法:点击右下角语言标识 → 输入 json → 选第一个纯 JSON(不是带 C 的那个);或者用快捷键 Ctrl+K M(Win/Linux)或 Cmd+K M(macOS)快速切换。
保存时自动格式化 ≠ 保存时语法检查
很多人以为开了 editor.formatOnSave 就能“一保存就报错”,其实这是两个独立机制:formatOnSave 只调用格式化器美化结构,而语法错误(比如少逗号、引号不闭合)靠的是语言服务的实时解析,和是否保存无关。
关键区别:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
-
json.validate.enable控制红波浪线是否出现(默认为true,但可能被工作区设置覆盖) -
editor.formatOnSave必须写成语言级配置:"[json]": { "editor.formatOnSave": true },不能只写顶层"editor.formatOnSave": true(否则会影响所有语言) - 若装了 Prettier,它可能劫持
.json文件的格式化行为,需加"prettier.disableLanguages": ["json"]或显式指定"[json]": { "editor.defaultFormatter": "vscode.json-language-features" }
tasks.json 报错“任务不存在”大概率是 JSON 本身非法
VSCode 加载 tasks.json 前会先做 JSON 解析,一旦失败就静默忽略整个文件——不会报错提示,只会让你在命令面板里找不到任务。
高频翻车点:
- 外层不是数组:必须用方括号
[]包裹,哪怕只有一个任务 - 用了单引号:
'label': 'build'或未加引号的 key:label: "build"全部非法 - 末尾多逗号:
"args": ["-g"],在最后一项后加了逗号 → 整个tasks块失效 - 复制进来的中文标点,比如全角引号
“name”或零宽字符(尤其从微信/PDF 粘贴)
建议打开 tasks.json 后确认右下角是 JSON 模式,再丢到 https://jsonlint.com/ 一键校验,比肉眼查括号快得多。
$schema 不生效?先盯死协议和大小写
加了 "$schema" 却没提示、没校验,90% 是路径问题。VSCode 对 schema 路径极其挑剔:
- 远程 URL 必须返回 HTTP 200,且
Content-Type是application/schema+json或application/json - 本地路径必须用
file:///协议,Windows 下盘符大写、三个斜杠缺一不可:"file:///D:/project/schemas/config.schema.json" - 相对路径(如
"./schemas/config.schema.json")直接被忽略,也不报错 - 修改
settings.json中的json.schemas后,已打开的文件要保存或重新打开才生效
验证是否加载成功:按 Ctrl+Shift+P → Developer: Toggle Developer Tools → Console 标签,看有没有 Failed to load schema from … 日志。










