vscode原生不支持json键排序,必须安装json sort插件;它仅对对象键做字母序重排,支持顶层/嵌套、选区与多光标,且不修改值或数组。

VSCode 自带的 JSON 排序功能根本不存在
VSCode 原生不提供任何对 JSON 对象键名排序的功能,也**没有内置命令叫 Sort JSON 或类似名称**。你搜到的“妙招”大多混淆了「格式化」和「键排序」——editor.action.formatDocument 只会按缩进/换行规则整理结构,完全不会动键的顺序。
必须装插件:推荐 JSON Sort(作者:richie5um)
这是目前最轻量、无依赖、行为明确的排序插件。它不改值、不重排数组、只对对象顶层或嵌套对象的键做纯字母序重排,且支持多光标和选区范围操作。
- 安装后右键 JSON 对象(或选中一段对象字面量),点击
Sort JSON keys - 快捷键默认未绑定,可在键盘快捷方式里搜索
json-sort.sort手动设置,比如设为Ctrl+Alt+S - 对嵌套对象生效:把光标放在任意
{}内部,它会递归排序所有子对象的键(可关,见下一条) - 想只排顶层?在
settings.json里加:"json-sort.recursive": false
别用 Prettier 或 ESLint 干这事
它们不是为键排序设计的。Prettier 的 jsonRecursiveSort 选项是假的——该配置项根本不存在于 Prettier 官方文档中,某些旧版 fork 或误导性博客编出来的;ESLint 的 sort-keys 规则只作用于 JS 对象字面量,对纯 .json 文件完全无效。
- 打开一个
.json文件,启用 Prettier 格式化,观察键顺序:不会变 - 试图在
.eslintrc.cjs里配"sort-keys": "error":对data.json零作用 - 混淆点在于:.json 文件 ≠ JS 中的 object —— 它们解析阶段不同,校验器根本不读取
排序后注意 schema 和语义破坏风险
JSON 键序在规范里本无意义,但现实里有人靠顺序做 UI 字段渲染、前端表单生成、甚至后端字段校验(比如某些老系统依赖 key 出现顺序)。盲目排序可能让界面字段乱序、diff 失控、甚至触发隐藏 bug。
- 团队协作前先确认:这个 JSON 是配置文件?还是 API 响应 mock?前者通常可排,后者最好别动
- Git diff 会因键序变化产生大量噪音,建议在
.prettierignore或提交前手动撤销排序(插件支持 undo) - 如果 JSON 里混着注释(非标准但常见),
JSON Sort会直接报错退出——它只处理合法 JSON,不兼容 comments
真正难的从来不是怎么排,而是排完谁来负责解释为什么 “apiVersion” 突然跑到了 “metadata” 前面。











