JSON中文变\u4f60\u597d是因ensure_ascii默认true,需在插件Settings中设"ensure_ascii": false;缩进混乱源于detect_indentation启用,应设为false并指定indent_size;键序重排属规范行为,不可关闭,依赖顺序时应用jq -S或Python控制;Ctrl+Alt+J无效需检查语法、编码及快捷键context配置。

JSON 格式化后中文变 \u4f60\u597d 怎么办
这是 ensure_ascii 默认为 true 导致的,js-beautify 类插件(如 HTML-CSS-JS Prettify)会把非 ASCII 字符强制转义。不是编码错了,是插件配置没关掉转义。
解决方法很简单:打开 Preferences → Package Settings → HTML-CSS-JS Prettify → Settings,确保这一行存在且为 false:
{"ensure_ascii": false}
别只改用户设置文件——必须改插件自己的 Settings 文件,否则不生效。改完不用重启,但要确认当前文件右下角显示的是 JSON 语法,否则设置被忽略。
缩进忽大忽小、混着 Tab 和空格
根本原因是插件启用了 detect_indentation,它会扫描文件前几行猜缩进风格,结果在混合格式的 JSON(比如带注释或从 API 复制来的)里误判。
必须显式禁用并锁定规则:
- 在插件 Settings 中设
"detect_indentation": false - 同时设
"indent_size": 2(RFC 7159 推荐值) - 手动统一当前文件缩进:
View → Indentation → Convert Indentation to Spaces,再点Indent Using Spaces
如果文件右下角状态栏没显示 UTF-8 编码,先 File → Reopen with Encoding → UTF-8,BOM 会导致 detect_indentation 解析失败,进而触发降级逻辑,表现就是缩进乱跳。
字段顺序被重排了,能关掉吗
不能——而且不该关。JSON 规范(RFC 7159)不保证对象键序,html_css_js_prettify 和 json_reindent 都不维护键序,这是设计使然,不是 bug。
如果你依赖顺序(比如生成可比对的 diff、做 schema snapshot),说明你已经超出纯格式化范畴:
- 用
jq -S '.' file.json做标准化排序(注意:-S 是 sort-keys) - 或用 Python 脚本控制输出顺序:
json.dump(obj, f, sort_keys=False, indent=2) -
JSON Reindent完全不碰键序,但它也不校验语法;若你用它后发现顺序“变了”,大概率是原始 JSON 本身字段就无序,只是之前没注意
为什么 Ctrl+Alt+J 按了没反应
不是快捷键失效,是前置条件断了。三个硬性检查项缺一不可:
- 右下角状态栏必须显示
JSON(不是Plain Text或JavaScript);点它手动切换,或用Ctrl+Shift+P → Set Syntax: JSON - 文件编码必须是
UTF-8,不能是UTF-8 with BOM;BOM 会让解析器静默退出,不报错也不执行 - 快捷键绑定必须带 context 限定,否则命令发出去但插件不响应。正确写法长这样(贴进
Preferences → Key Bindings右侧用户文件):
[{"keys": ["ctrl+alt+j"],"command":"html_css_js_prettify","args": {"type":"json"},"context": [{"key":"selector","operator":"equal","operand":"source.json"}]}]
少一个 context 字段,或者 operand 写成 source.js,都会让按键“石沉大海”。


















