一切福田,不離方寸,從心而覓,感無不通。

com.alibaba.fastjson转换JSON数据后顺序与原JSON字符串顺序不一致原因分析

转换字符串示例:

 

结果:

 

我们会发现顺序与原来的字符串顺序不一致。

通过DEBUG去com.alibaba.fastjson.parser.DefaultJSONParser的下述方法

 

重点就是此行的lexer.isEnabled(Feature.OrderedField)=false,打开JSONObject的源码构造方法可以发现当ordered参数值为false时使用的是HashMap存放数据。

 

hashmap是数组加链表结构,根据key的hash算法确定在数组中的位置,当发生hash冲突的时候,根据二叉树或者红黑树构成链表。所以是有序的,key确定,位置也就确定了。

如果要实现转换前的数据顺序与转换后的数据顺序一致,可以使用如下方式:

 

此时会使用LinkedHashMap,LinkedHashMap的内部维持了一个双向链表,保存了数据的插入顺序,遍历时,先得到的数据便是先插入的。

 

from:https://blog.csdn.net/h363659487/article/details/103880710