两个包含相同数据但键顺序不同的文档,用纯文本差异比较是不可能的。 手写配置和程序编写的配置几乎永远不会在顺序上达成一致,以相同方式 排序两者是使它们重新可比较的方法。
使用JSON键排序器
选择顺序,A到Z或Z到A,缩进宽度,然后按排序键。只有对象键会 移动。数组保持原样,因为数组的顺序是其包含数据的一部分,而不是 输入方式的意外,悄悄重新排序数组的工具会更改文档的含义,同时声称 只是整理它。
排序
{"item10":"a","item2":"b","Zebra":"c","apple":"d","list":[3,1,2]}
默认情况下按精确字符代码顺序返回键:Zebra在apple之前
(大写字母排在小写字母之前),item10在item2之前
("1"是比"2"小的字符)。数组[3, 1, 2]完全未被触及。
“数字按顺序”选项
字符代码顺序是item10排在item2之前的原因:比较一次查看一个
字符,永远不会注意到10比2大。启用“数字按顺序”会将数字序列读作
数字,因此item2正确地排在item10之前。这在工具中明确编写,
而不是交给浏览器的区域感知比较,因为遵循页面语言的比较会在
印地语页面上与英语页面上以不同方式排序同一文件,整理文档的
工具必须无论谁使用都给出相同的答案。
重复键
具有重复键的文档在排序后保留两个副本,并排放置。此工具不会像
基于JSON.parse的方法那样默默保留最后一个来决定哪个“正确”;
它排序现有的内容,将关于重复键的决定留给您,或交给
JSON验证器,它会将其标记为警告。
为什么排序不会更改您的数据
无论是否排序,值、它们的类型和精确文本都是相同的。这是显示和 比较的便利,不是文档含义的转换,这就是为什么在 JSON差异工具中比较之前排序文档是安全的, 无需担心排序本身引入了差异。