编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 格式化 / JSON键排序

JSON键排序

按字母重排JSON的键并整理

输入
结果

这个工具能做什么

JSON 键排序做的事情很具体:把你粘进来的 JSON 解析成对象后,将每个对象的键名按字母顺序重新排列,再以两个空格缩进格式化输出。它默认递归处理所有嵌套层级——顶层对象、嵌套对象、以及数组里包含的对象都会被排序;数组本身的元素顺序保持原样不动,因为数组是有序结构,打乱顺序会改变语义。它解决的痛点很直接:同一份数据,不同的序列化库、不同的手写习惯会让键的排列千差万别,两份内容完全等价的 JSON 直接做文本 diff 会满屏飘红,根本看不出到底改了什么。把两份都做一次 json 键排序,键的位置就对齐了,真正的差异才会显出来。

工作方式是先用标准 JSON 解析把字符串变成内存里的对象树,然后深度优先遍历这棵树:遇到普通对象就取出它的所有键,做一次字典序排序,再按新顺序重建对象;遇到数组则保留下标顺序,但对每个元素继续递归下去,所以数组内的对象也会被一并整理。这里的排序是按字符的 Unicode 码位比较的,属于纯字典序而非「自然顺序」,这带来一个需要注意的细节:大写字母(A–Z,码位 65–90)排在小写字母(a–z,97–122)之前,所以 Name 会排在 age 前面,数字字符也排在字母之前。最后用两空格缩进重新序列化,得到的就是键顺序规范、层级清晰的 json 整理结果。整个解析、排序、格式化都在浏览器本地完成,不上传数据。

最典型的用法是做结构比对。比如你怀疑测试环境和生产环境的某个接口返回不一致,两边各抓一份响应,分别做一次 json 字段排序,再丢进任意文本对比工具,字段顺序被拉平之后,多出的字段、变化的取值一目了然,不会再被键顺序的差异干扰。另一个常见场景是整理配置文件或 mock 数据:手写或多人协作攒出来的 config.json、fixture 文件往往键名东一个西一个,排一遍序之后同类字段位置固定,阅读和后续维护都更省心;配合版本控制,键顺序稳定还能显著减少无意义的 diff 噪音,让 code review 只聚焦在真正的改动上。

有几个边界情况值得留意。首先这个工具只处理合法 JSON,带注释、尾逗号、单引号的「类 JSON」会解析失败,需要先修成标准格式。其次前面提到的排序是区分大小写的字典序,如果你期望的是「忽略大小写」或「AaBb 交错」的排列,结果会和直觉不同;纯数字形式的键(如 "10"、"2")由于运行环境对整数型键的特殊处理,可能按数值而非字符顺序呈现,这不是排序失效而是 JSON 对象键的固有特性。另外,输入里若存在重复键,解析阶段只会保留最后一个,这是 JSON 解析的标准行为而非本工具删改。它和「JSON 格式化/美化」工具的区别在于:后者只调整缩进不动键的位置,而 json 排序会真正改变键的先后顺序,两者可以配合使用。

JSON键排序是一个免费的在线工具,打开网页就能用,不用下载也不用注册。平时大家搜的“json键排序”、“json排序”、“json字段排序”,说的都是这个。

常见使用场景

使用方法

  1. 把内容粘贴到输入框(生成类工具直接设置选项)。
  2. 按需要选择选项,点操作按钮。
  3. 结果出现在下方,点「复制结果」即可带走。

常见问题

键是按什么规则排序的?
按键名字符的 Unicode 码位做字典序升序排列,属于区分大小写的排序。因此大写字母整体排在小写字母之前(如 Name 在 age 前),数字字符也排在字母之前。
数组里的元素也会被重新排序吗?
不会。数组的元素顺序始终保持原样,因为数组是有序结构,调整顺序会改变数据含义。但数组里如果是对象,这些对象内部的键仍会被递归排序。
它和普通的 JSON 格式化/美化工具有什么区别?
格式化工具只调整缩进和换行,不改变键的先后位置;本工具会真正把键名重排成字母顺序,属于 json 整理而非单纯美化。想同时对齐结构又统一格式时,两者可以结合使用。
为什么排序后数字形式的键顺序看起来不对?
像 "1"、"2"、"10" 这类纯整数形式的键,受 JSON 对象对整数型键的固有处理影响,会按数值顺序而非字符字典序排列。这是键本身的特性,不是排序出错。
粘进去的内容排序失败是什么原因?
多半是输入不是合法 JSON,例如带了注释、尾逗号、单引号,或括号不匹配。工具只接受标准 JSON,先把这些问题修正后再排序即可。

相关工具

查看全部「格式化」工具 →