fastjson排序 Map多层嵌套转换自动排序问题终极解决方案
最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObject(json, LinkedHashMap<String,String>.class); 来转换,问题来了,第一层顺序是对的,但是第二层排序居然出问题了,目前仅仅只是需要转换成String 他居然把String都给自动排序了,后来网上查了很多资料发现还可以采用一种方式:
- JSONObject jsonObj = new JSONObject(true);
- Map m= jsonObj.parseObject(json, LinkedHashMap.class);
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":""}}
无奈,跟踪fastjson源码,花了2小时在com.alibaba.fastjson.parser.DefaultJSONParser 类中475行发现
- else if (ch == '{') { // 减少嵌套,兼容android
- lexer.nextToken();
- final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class;
- <span style="color: #ff0000;"><strong>JSONObject input = new JSONObject(lexer.isEnabled(Feature.OrderedField)</strong></span>);
else if (ch == '{') { // 减少嵌套,兼容android
lexer.nextToken();
final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class;
<span style="color: #ff0000;"><strong>JSONObject input = new JSONObject(lexer.isEnabled(Feature.OrderedField)</strong></span>);
</pre>
居然这里面判断了Feature.OrderedField
果断知道了解决办法:
HashMap m= JSON.parseObject(json,LinkedHashMap.class,Feature.OrderedField);
搞定,输出结果:
{t1=, t3=, t2={"a1":"","a3":"","a2":""}}
功夫不负有心人.........
顶
踩

- 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>
评论
发表评论
fastjson排序 Map多层嵌套转换自动排序问题终极解决方案的更多相关文章
- golang map多层嵌套使用及遍历方法汇总
原文:https://blog.csdn.net/boyhandsome7/article/details/79734847 ------------------------------------- ...
- react中密码自动填充及解决火狐浏览器,360浏览器记住密码后,密码框自动填充终极解决方案
先直接上核心代码如下: 在火狐浏览器,360浏览器,初次加载,bug长这样: 如果你想通过生命周期componentDidMounted等生命周期进行置空操作都是不行的,这可能是浏览器自带的特性记住密 ...
- 利用阿里巴巴封装的FastJSON来解析json并转换成map
利用阿里巴巴封装的FastJSON来解析json并转换成map package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...
- fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题
fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...
- 排序map
1.根据map的值,升序排序 Map<String, Integer> map = new TreeMap<String, Integer>(); map.put(" ...
- js关于对象键值为数字型时输出的对象自动排序问题的解决方法
一.对象键值为数字型时输出的对象自动排序问题如: var objs = { "1603":{id:"1603"}, "1702" ...
- 多层嵌套的json数据
很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...
- 水果(map的嵌套)
夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了 ...
- 接口自动化多层嵌套的json数据处理
最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,在对响应数据进行校验的时候,可以通过(key1.key2.key3)形式获取嵌套字典值的方法获取响应值,再和预期值比较 def get ...
随机推荐
- 【UML】UML在软件开发各个阶段的应用
一.UML5个互联视图 UML中经常使用5个互联的视图来描写叙述系统的体系结构. 如图 (1)用例视图(Use-case View) 由专门描写叙述可被终于用户.分析人员.測试人员看到的系统行为的用例 ...
- Android程序使用SOAP调用远程WebService服务
在现在的应用程序中.不可能不使用到网络,而且后台一定是有server作为支撑的. 现在最常见的调用方式有HTTP的GET .POST方式,返回JSON或者XML数据. 可是也有一种常见的形式就是调用W ...
- RelativeLayout-代码中成员控件width height
今天需要在代码中动态的设置一个textview的width跟height属性,记录下来. textview在xml中的布局如下 <RelativeLayout android:layout_wi ...
- 李笑来~执行力WWH
什么是秘密 秘密是指只有极少数人知道的实用信息.这个实用信息可以为知道且懂得运用的人获得收益,这个收益可能包括钱.名声和快感. 什么是执行力 执行力=What + Why + How,即WWH 执行力 ...
- 一句SQL按照某个字段数值拆分出对应的数据条数,借助数据库常量表【master..spt_values】实现
简介:master..spt_values,数据行拆分简单小技巧 SELECT ProjGUID , CostGUID , SUM(FtAmount) AS FtAmount , BeginMonth ...
- Android ViewPager嵌套ViewPager滑动冲突处理方法
dispatchTouchEvent方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发, 然后决定是自身消费当前事件还是继续往下分发给子控件处理.返回true表示不继续分发,事件没 ...
- Echarts Y轴min显示奇葩问题(做此记录)
项目需求是根据不同情况显示最大值最小值 有9-35 12-50 9-50 三种情况 前面两种可以显示出来 但是9-50的话 最小值9显示不出来 8,7等就可以显示出来 后面想到强制从最小值 ...
- 通俗理解vuex原理---通过vue例子类比
本文主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一. 首先我们先了解下vuex的作用 vuex其实是集中的数据管理仓库,相当于数据库mongoDB,MySQL等,任何组件都可以 ...
- BZOJ3262: 陌上花开(三维偏序,CDQ分治)
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美 ...
- php基础篇之一
1.PHP是什么 官方文档:超文本预处理器 2.PHP能够做一些什么? PHP主要应用在一下领域: (1)服务器端脚本,需要:PHP解析器,PHP服务器,PHP浏览器. (2)命令行脚本,只需要PHP ...