JSON 键排序
递归排序 JSON 键名
JSON 与数据
🔒 100% 本地运行 — 你的数据不会离开当前页面由 Evan 维护•最近更新:2026年9月29日
页面阅读模式
完整说明还包括常见问题处理、操作示例、代码片段、FAQ 和相关工具,便于核对结果或排查问题。
工具说明
用浏览器 localeCompare 递归排列 JSON 对象键,再按两空格缩进输出。默认保持数组顺序;可选按文本排序标量数组,并单独保护根数组。整数索引键枚举与数字处理仍遵循 JavaScript 规则。适合辅助审阅,不是用于签名的规范 JSON;草稿保存在本地。
生产可用片段
标量数组按文本而非数值排序
text
输入:
{"z":[2,10,1],"a":true}
默认输出(压缩展示):
{"a":true,"z":[2,10,1]}
开启标量数组排序,升序:
{"a":true,"z":[1,10,2]}
保留根数组顺序不会保护嵌套的 z 数组。失败门诊(高频踩坑)
把排序结果当作签名规范化输入
原因:比较器对文本调用 localeCompare;整数索引键仍按 JavaScript 枚举,数字由 JSON.stringify 重新序列化。这里没有实现规范 JSON 算法。
修复:可用于已知设置下的本地审阅和样例整理;密码学签名必须使用对应协议指定的精确规范化算法。
常见问题
数组顺序一定不变吗?
默认保持。开启“排序标量数组”后,只含 null、字符串、数字或布尔值的数组可以重排。“保留根数组顺序”只保护最外层,嵌套标量数组仍可能排序;含对象或数组的数组保持元素顺序。
数字会按数值大小排序吗?
不会。键名和标量数组值按文本调用 localeCompare,可选升序或降序;JavaScript 序列化时还会把整数索引键按数值顺序枚举。这不是签名用规范 JSON,也不保证不同语言环境的排序一致。
是否只改变键顺序?
输入会重新解析并按两空格缩进序列化,数字格式和精度遵循 JavaScript JSON 处理。点击排序可查看无效 JSON 错误;输入和选项保存在当前浏览器本地。
继续浏览