如何防止map形式的json字符串转json对象重新排序问题

在做报表的时候遇到从数据库查询数据已经做了排序,取出返回前台展示却是乱序的问题。经过调试发现由于数据库查回返回的数据放到了HashMap中,HashMap会根据其中的key的hashcode和equals方法进行重新排序,从而导致顺序变化问题,为了解决该问题改用LinkedHashMap。LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序。
HashMap的例子

  public static void main(String[] args) {  
  Map<String, String> map = new HashMap<String, String>(); 
  map.put("a3", "aa");
  map.put("a2", "bb"); 
  map.put("b1", "cc");
  for (Iterator iterator = map.values().iterator(); iterator.hasNext();)     {
        String name = (String) iterator.next(); 
        System.out.println(name);   
	 }  
  }

输出:
bb
cc
aa

LinkedHashMap例子:

 public static void main(String[] args) {   
 Map<String, String> map = new LinkedHashMap<String, String>();
 map.put("a3", "aa");       
 map.put("a2", "bb"); 
 map.put("b1", "cc"); 
 for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {           
         String name = (String) iterator.next(); 
         System.out.println(name);     
 }
 }

输出:
aa
bb
cc
但是问题仍未完全解决,因为中间将LinkedHashMap转成了json字符串,然后用fastjson转json对像进一步处理数据。这里的底层会默认采用hashmap的那一套对map数据又重新排序一次。为了避免这个问题查了下网上的资料,解决方案如下(json为输入的json字符串):

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

但是输出问题还是存在第二层以后排序混乱,如下:
传入Json:
{“t1”:"",“t3”:"",“t2”:{“a1”:"",“a3”:"",“a2”:""}}
输出:
{t1=, t3=, t2={“a1”:"",“a2”:"",“a3”:""}}
解决第二层重新排序的办法(json为输入的json字符串):

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

传入Json:
{“t1”:"",“t3”:"",“t2”:{“a1”:"",“a3”:"",“a2”:""}}
输出结果:
{t1=, t3=, t2={“a1”:"",“a3”:"",“a2”:""}}
本文参考:
https://blog.csdn.net/leiyong0326/article/details/52948219
http://inlhx.iteye.com/blog/2312512

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值