JSON反序列化乱序的问题

2019/09/16 14:48 下午 posted in  JSON

What

将Object 转成JSON时,会出现key值的顺序与原顺序不一致的情况(新的顺序按照字母序重新排序)

Why

原因在于HashMap,当用fastjson反序列化时,会使用HashMap。而HashMap底层会根据map中key的hashcode和equals重新排序。

How

使用LinkedHashMap替换HashMap。

JSONObject jsonObj = new JSONObject(true);  
Map m= jsonObj.parseObject(json, LinkedHashMap.class);  

这个方法可以保证第一层的map按照原顺序呗反序列化。想要递归所有层都按照原顺序需要使用

HashMap m=JSON.parseObject(json,LinkedHashMap.class,Feature.OrderedField);

PS

Q: jackson 会乱序吗?
A: 不会

参考资料

https://github.com/alibaba/fastjson/issues/954
https://blog.csdn.net/yj1499945/article/details/78260650