fastjson排序 Map多層嵌套轉換自動排序問題終極解決方案


閱讀更多

       最近項目中用到了fastjson(1.2.15)需要將前端多層嵌套json轉換為map,由於map的無序性,想了很多辦法,最終找到使用 Map m= JSONArray.parseObject(json, LinkedHashMap<String,String>.class); 來轉換,問題來了,第一層順序是對的,但是第二層排序居然出問題了,目前僅僅只是需要轉換成String 他居然把String都給自動排序了,后來網上查了很多資料發現還可以采用一種方式:

Java代碼   收藏代碼
  1. JSONObject jsonObj = new JSONObject(true);  
  2. Map m= jsonObj.parseObject(json, LinkedHashMap.class);  

 但是輸出問題還是存在第二層以后排序混亂,如下:

傳入Json:
{"t1":"","t3":"","t2":{"a1":"","a3":"","a2":""}}

 

輸出:

{t1=, t3=, t2={"a1":"","a2":"","a3":""}}

 

無奈,跟蹤fastjson源碼,花了2小時在com.alibaba.fastjson.parser.DefaultJSONParser 類中475行發現

Java代碼   收藏代碼
  1. else if (ch == '{') { // 減少嵌套,兼容android  
  2.                    lexer.nextToken();  
  3.   
  4.                    final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class;  
  5.   
  6.                    <span style="color: #ff0000;"><strong>JSONObject input = new JSONObject(lexer.isEnabled(Feature.OrderedField)</strong></span>);  
  7.                     
5
0
分享到:
  • 2016-07-20 23:43
  • 瀏覽 10501
  • 評論(3)
  •   <li>分類:<a href="https://www.iteye.com/blogs/category/opensource">開源軟件</a></li>      
      <li class="last"><a href="https://www.iteye.com/wiki/blog/2312512" target="_blank" class="more">查看更多</a></li>
    </ul>    
    
評論
3 樓 youngcoder 2017-12-05  
666   xiexie ~
2 樓 FutaoSmile丶 2017-12-04  
注冊賬號發句感謝
1 樓 ipuhua 2016-09-27  
非常棒!完美解決了我在使用fastjson遇到的問題。感謝~!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM