背景

记录项目中遇到的

关于fastjson jsonobject转string乱序,string转jsonObject乱序问题的解决方案

fastJson issues

问题来源描述参见:

https://github.com/alibaba/fastjson/issues/359

https://github.com/alibaba/fastjson/issues/954 【最终解答】

单嵌套的Map序列化与反序列问题

     JSONObject map=new JSONObject(true);//关键要设置为true,否则乱序
map.put("请假类型","1");
map.put("单据状态","2");
map.put("开始时间","3");
map.put("结束时间","4");
map.put("请假原因","5");
OkhttpUtils.println(map.toString());//封装的打印语句,不用理会 OkhttpUtils.println(map.toString());
//这条直接转的方案,会产生乱序问题!!!
//JSONObject root=JSON.parseObject(map.toString());
LinkedHashMap<String, Object> root=JSON.parseObject(map.toString(),new TypeReference<LinkedHashMap<String, Object>>(){} );//关键的地方,转化为有序map
OkhttpUtils.println(JSON.toJSONString(root));
//有了map对象,你就可以顺序打印,至于转不转JSONObject对象,看需求在定
// JSONObject json=new JSONObject(true);
// json.putAll(root);//存放map对象
Collection<Object> lists=root.values();
// Collection<Object> lists=json.values();//这种new JSONObject方案也可以
//打印
for (Object object : lists) {
OkhttpUtils.println(object.toString());
}

程序打印:

【第45行】:{"请假类型":"1","单据状态":"2","开始时间":"3","结束时间":"4","请假原因":"5"}
【第48行】:{"请假类型":"1","单据状态":"2","开始时间":"3","结束时间":"4","请假原因":"5"}
【第51行】:{"请假类型":"1","单据状态":"2","开始时间":"3","结束时间":"4","请假原因":"5"}

上述代码见实例程序:

https://github.com/Arisono/Gradle-demo/blob/master/src/main/java/com/gradle/java/utils/FastJsonUtil.java

组合的map json串,嵌套的map json串问题

类似这种形式:

{"Format":"json","Name":"wwqqzz","Para":{"myuser":333,"mynum":"222", "mylist":[11,55,"33"]},"Reserved":{},"Type":"request","Version":"1.0"}

Feature.OrderedField 解决嵌套多层map 的时候序列排序问题

 LinkedHashMap<String, Object> rootStr=JSON.parseObject(mapStr.toString(),new TypeReference<LinkedHashMap<String, Object>>(){} ,Feature.OrderedField);

联系方式:

参考文献:

Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)的更多相关文章

  1. python: 序列化/反序列化及对象的深拷贝/浅拷贝

    一.序列化/反序列化 python中内置了很多序列化/反序列化的方式,最常用的有json.pickle.marshal这三种,示例用法如下: import json import pickle imp ...

  2. 一个更好的C++序列化/反序列化库Kapok

    KapokFAQ1.Kapok的特点简单,易用,header-only,只需要引用Kapok.hpp即可:高效,初步测试性和messagepack相当.它是纯c++11实现,因此需要支持C++11的编 ...

  3. 转载-------- JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    转载--*--*---- 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,J ...

  4. javabean转换为map对象

    在调用第三方接口发现对方使用map进行接收(不包括秘钥等),将bean类属性转换为map,直接贴代码: /** * JavaBean对象转化成Map对象 * * @param javaBean */p ...

  5. MessagePack Java 0.6.X List, Map 对象的序列化和反序列化

    为了序列化原生的容器对象例如  List 和 Map 对象,你必须使用 Template. Template 对象是 serializer 和 deserializer 的配对.例如,为了序列化一个  ...

  6. fastjson序列化和反序列化报com.alibaba.fastjson.JSONException: autoType is not support异常问题,解决方案整合

    1.问题起因 2017年3月15日,fastjson官方发布安全升级公告,该公告介绍fastjson在1.2.24及之前的版本存在代码执行漏洞,当恶意攻击者提交一个精心构造的序列化数据到服务端时,由于 ...

  7. FastJson序列化对象复杂时出错问题解决

    FastJson序列化对象复杂时出错问题解决 针对复杂的对象,如Map<String, List<Map<String, XxxObject<A, B, C>>&g ...

  8. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

  9. python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理

    python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...

随机推荐

  1. ajax利用php上传图片

    <script type="text/javascript"> window.onload = function(){ document.getElementById( ...

  2. HTML高级标签(3)————表单的应用

    在HTML开发中,标签的种类和数量非常多,不可能说每一种都研究透.非常多能够用CSS来控制的标签,我们基本没有必要在上面浪费时间.所以,我们仅仅要掌握在HTML开发中比較经常使用的标签就全然能够了. ...

  3. Session丢失原因与解决方案

    win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,   造成保存在该进程中的session丢失. 因为Session,Appl ...

  4. html 代码

    1.结构性定义 文件类型 <HTML></HTML> (放在档案的开头与结尾) 文件主题 <TITLE></TITLE> (必须放在「文头」区块内) 文 ...

  5. android studio 一次编译错误:Error:Minimum supported Gradle version is 2.14.1.

    因为需要,今天从git上重新下载工程到另一个目录下,结果运行的时候报了这个错:Error:Minimum supported Gradle version is 2.14.1.  Current ve ...

  6. html doctype作用

    简单介绍下html页面中DOCTYPE声明的作用: <!doctype html>告诉浏览器是使用标准模式还是怪异模式渲染页面. 1.为html页面添加了doctype,则浏览器在stan ...

  7. loadrunner--分析图合并

    一.分析图合并原理 选择view->merge graphs,弹出如图1所示对话框 图1(设置合并图) 1.选择要合并的图.选择一个要与当前活动图合并的图,注意这里只能选择X轴度量单位相同的图. ...

  8. Java BigDecimal的基本使用方法

    1.对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类 2.运算速度比一般的+.-.*./要快 3.基本方 法描 述  ...

  9. 7 Java Performance Metrics to Watch After a Major Release--转

    原文地址:https://dzone.com/articles/7-java-performance-metrics-to-watch-after-a-major-1 The Java perform ...

  10. window.print()打印网页(一)

    有时候需要将网页内容打印到纸上,最简单的一种方法是用window对象的print方法. window.print()默认打印当前网页的所有部分.(除了背景,默认打印都是白底黑字,如果有特别的设置 要另 ...