JSON 键排序
开发
按字母顺序重新排序 JSON 对象的键,可选递归进入嵌套对象与对象数组。数组本身保留原始顺序 — 只改变对象键的顺序。便于确定性 diff(提交已排序的 `package.json`,让审阅者只看到有意义的变更)、在快照测试前规范化 API fixtures,或匹配对键顺序严格的下游工具的预期顺序。
—
已排序
{
"author": {
"email": "demo@example.com",
"name": "Alice"
},
"dependencies": {
"astro": "^4",
"react": "^18"
},
"name": "demo",
"scripts": {
"build": "astro build",
"dev": "astro dev",
"test": "vitest"
},
"version": "1.0.0"
}只重排对象键。数组元素顺序保留 — 必要时单独排序。
使用方法
- 粘贴你的 JSON(`package.json` 或任何对象)。
- 切换 `deep` 以同时排序嵌套对象,或关闭以仅排序顶层键。
- 选择升序或降序并复制结果。
常见问题
- 会重排数组元素吗?
- 不 — 只对象键。数组保留原始顺序,因为元素位置通常有意义。若也需要数组元素排序,请先执行专门的排序步骤(如 jq `sort_by`)。
- 为什么要排序 `package.json`?
- 像 `npm` 这类工具对键顺序宽容,但人类不是。排序让审阅者专注于真正的变更(新依赖),而非 `npm install` 重排导致的噪声。一些团队用 `sort-package-json` pre-commit 钩子强制执行。
- 排序是 locale 感知的吗?
- 不是 — 是按码点排序,可选不区分大小写折叠。这与 `jq`、`Object.keys().sort()` 及多数语言标准库默认一致。Locale 排序对非 ASCII 键可能给出不同结果,但对于规范输出很少是你想要的。
- JSON5 / 注释 / 末尾逗号呢?
- 仅严格 JSON — 输入必须能被 `JSON.parse` 解析。带注释的配置文件请先剥除注释,或用 JSON5 解析器后再粘贴。