AZ Tools

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"
}

只重排对象键。数组元素顺序保留 — 必要时单独排序。

使用方法

  1. 粘贴你的 JSON(`package.json` 或任何对象)。
  2. 切换 `deep` 以同时排序嵌套对象,或关闭以仅排序顶层键。
  3. 选择升序或降序并复制结果。

常见问题

会重排数组元素吗?
不 — 只对象键。数组保留原始顺序,因为元素位置通常有意义。若也需要数组元素排序,请先执行专门的排序步骤(如 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 解析器后再粘贴。

相关工具