所谓“不消耗任何资源”一定是不可能的,只有多少的问题。如果只需要判断异同,理论上只要比较两个字符串是否相同来作决定是最简单的。但,实际情况不是这样。
如果是两个序列化之后的数据结构相比较,如果序列化方案能保证内部有序,如果只需要比较两个数据结构是否相同,可以直接比较两个字符串。但,json 规则不是这样的,具体到你举的这个例子,key1 key2 谁出现在字符串之内比较靠前的位置理论上是随机的。
一个折衷的方案是选择某一具固定的序列化算法实现,而该算法保证了序列化结果内部有序,比如你选择一个叫“有序的json”的 json 实现,该算法保证 hash key 在序列化之后按字母顺序排序,那么两个结果字符串就是可比的了。
另外一个办法是自己发明一个序列化算法,比如叫“特别快的序列化算法”,比如你能确定你只有 hash 表,value 只有数字型,那你是数据结构可以是这样
j1 = "k1=1,k2=2"
j2 = "k1=2,k2=2"
这样异同的比较就能保证了,存储也比 json 更节省一些。当然,算法本身的实现这时成了主要问题,包括但不限于安全性、稳定性、效率、可移植等。
不好意思,刚翻了会知乎,手滑了,按知乎体写了半天。 :)