zoukankan      html  css  js  c++  java
  • 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遇到的问题。感谢~!
  • 相关阅读:
    ListComparer
    C#.net中类与结构的区别
    对C# 中堆栈,堆,值类型,引用类型的理解
    一道面试题
    Mvc不等于三层架构
    SQL养成一个好习惯是一笔财富
    清除MSSQL事务日志文件
    面向对象设计(OOD)五大基本原则
    .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解之一
    IIS7 Login failed for user IIS APPPOOL\ASP.NET v4.0
  • 原文地址:https://www.cnblogs.com/jpfss/p/10168171.html
Copyright © 2011-2022 走看看