VSCode中Shift+Alt+F对JSON文件无反应,是因为文件未被识别为JSON或JSONC模式;需点击右下角状态栏切换语言模式,并确保启用格式化与验证设置。

VSCode 里 JSON 格式化为什么按 Shift+Alt+F 没反应?
默认情况下,VSCode 不会为未识别语言模式的文件启用格式化功能。如果你打开的是一个没有扩展名的文本文件,或后缀不是 .json(比如 config、data),VSCode 就不会自动激活 JSON 格式化器——哪怕内容确实是 JSON。
解决方法很简单:先确认右下角状态栏显示的是 JSON(不是 Plain Text 或 JSONC)。如果不是,点击它,选择 Configure File Association for '.xxx',然后选 JSON;或者直接按 Ctrl+K M(Windows/Linux)或 Cmd+K M(macOS),输入 json 回车。
- 如果文件含注释(如
//或/* */),VSCode 默认用JSONC模式,此时Shift+Alt+F仍可用,但校验逻辑更宽松——它不会报注释错误,但也不会把注释转成合法 JSON - 若你强制想用纯 JSON 校验(拒绝任何注释),务必切到
JSON模式,否则eslint或prettier插件可能跳过检查
如何让保存时自动格式化 + 报错不通过?
VSCode 本身只做格式化,不内置语法校验(即不会标红提示 Unexpected token 这类错误)。要实现“格式化 + 实时校验”,得靠插件配合设置。
推荐组合:ESLint 插件 + 项目级配置,或轻量方案:启用 VSCode 内置的 JSON 验证器(无需额外插件)。
- 确保
"json.validate.enable": true(默认开启,可在settings.json中确认) - 在用户设置或工作区设置中加入:
"editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll": true } - 注意:
source.fixAll对 JSON 无效,它依赖语言服务器支持;JSON 的修复仅靠格式化,错误仍需手动修正
prettier 和内置 JSON 格式化器有啥区别?
VSCode 自带的 JSON 格式化器(由 TypeScript 语言服务提供)严格遵循 JSON 规范,不支持缩进空格数以外的自定义(比如单引号、尾逗号)。而 prettier 是通用格式化工具,对 JSON 支持有限制:
-
prettier默认不处理.json文件,除非你在prettier.config.js显式启用:module.exports = { "overrides": [ { "files": "*.json", "options": { "tabWidth": 2 } } ] } - 即便启用了,
prettier仍会拒绝格式化含注释的.json文件(报错Unexpected comment),而 VSCode 内置格式器在JSONC模式下可安全处理 - 性能上,内置格式器更快,无启动延迟;
prettier需加载 Node.js 环境,小文件差异不大,大文件(>1MB)可能卡顿
遇到 Invalid JSON: Unexpected token 却找不到哪错了?
这类错误常因不可见字符导致,比如从网页复制的 JSON 带有零宽空格(\u200b)、中文引号(“”)、或 Windows 的 \r\n 混用。VSCode 默认不高亮这些字符。
快速定位方法:
- 按
Ctrl+Shift+P打开命令面板,运行Toggle Render Whitespace,查看是否有异常空格或控制符 - 粘贴到 jsonlint.com,它会精确定位行号和列号
- 在 VSCode 中安装
Highlight Bad Chars插件,自动标红非 ASCII 空格、全角符号等 - 如果错误出现在第一行第一个字符,大概率是 UTF-8 BOM 头(
EF BB BF),用命令面板运行Change File Encoding→Save with Encoding→UTF-8
真正麻烦的不是格式化失败,而是你以为格式化成功了,其实只是把错误缩进得更整齐而已。


















