Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 949|回复: 0

fastjson排序 Map多层嵌套转换自动排序问题终极解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-2 23:35:42 | 显示全部楼层 |阅读模式
    阅读更多

           最近项目中用到了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遇到的问题。感谢~!
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 05:29 , Processed in 0.085854 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表