vscode格式化json无需插件,关键在于正确设置语言模式为json且内容合法:右下角切json模式、确保文件后缀为.json、清除中文引号/单引号/注释/零宽字符,再用shift+alt+f格式化。

VSCode格式化JSON根本不需要插件,但90%的问题都卡在语言模式没切对或内容本身不合法——按Shift+Alt+F(Windows/Linux)或Shift+Option+F(macOS)没反应,八成不是快捷键坏了,而是VSCode压根没把它当JSON解析。
为什么Shift+Alt+F没反应?先看右下角是不是JSON
VSCode不会自动把粘贴进来的文本识别为JSON,哪怕你复制的是{"name":"alice"}。它默认塞进Plain Text里,此时格式化功能完全不可用。
- 点右下角语言模式标识(比如显示
Plain Text),选JSON;别选JSON with Comments,它不触发内置格式化器 - 文件没后缀(如
config)或后缀非.json(如.env.json),快捷键照样失效——用Ctrl+K M(Win/Linux)或Cmd+K M(macOS)临时切语言模式更稳 - 如果切完还是灰显,搜设置项
json.format.enable,确认值为true(默认就是,极少被关)
粘贴后一堆乱码单行?检查内容是否合法
从浏览器控制台、邮件、PDF里复制的JSON,常带隐形陷阱,VSCode一解析就失败,连报错都懒得弹。
- 中文引号:
“name”→ 必须换成英文双引号"name" - 单引号:
'key': 'value'→ JSON标准只认双引号,单引号直接报Unexpected token ' - 注释:
// todo或/* ... */→ JSON不支持,删掉再格式化;想保留就得用JSON with Comments模式,但此时Shift+Alt+F无效 - 零宽字符:微信、钉钉、Outlook里复制的内容常含
\u200b等不可见字符,用正则/[\u200b-\u200f\u202a-\u202f\u2060-\u206f\ufeff]/g全局替换为空
想格式化JS/HTML里的JSON字符串?别直接选中就按快捷键
比如你在fetch响应里复制了{"user":{"id":1}},直接粘进JS文件并选中——VSCode认为这是JS字符串字面量,不是独立JSON,Shift+Alt+F会失败或格式错乱。
- 最稳做法:复制JSON字符串 → 新建空白文件 →
Ctrl+K M切JSON→Shift+Alt+F→ 复制回原处 - 如果非要在原文件操作,得先确保光标落在字符串内部,再用命令面板
Ctrl+Shift+P→ 输入Format Selection(不是Format Document)→ 回车 - 别信“自动格式化字符串”类插件,多数依赖正则提取,遇到嵌套引号、转义符就崩
格式化后缩进变4格、引号变单引号?查editor.defaultFormatter
VSCode 1.85+ 默认改用vscode.json-language-features作为JSON格式化器,但如果你装过Prettier,它可能劫持了默认行为,导致输出不符合预期。
- 打开设置,搜
Default Formatter→ 展开JSON语言项 → 确保值是vscode.json-language-features - 如果用了Prettier,检查
[json]配置段是否覆盖了editor.defaultFormatter;也确认prettier.disableLanguages没把json加进去 -
editor.tabSize控制缩进空格数,json.tabSize可单独覆盖;但引号类型、末尾逗号等由语法规范强制约束,格式化器不会“优化”成单引号或留尾逗号
真正容易被忽略的是:格式化器只美化合法JSON,它不修复语法错误。一个{name: "alice"}(键名没引号)无论按多少次Shift+Alt+F,都只会保持原样缩进——校验和美化是两件事,先让JSON.parse()能过,再谈排版。











