Gson

  1. 依赖
 <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version></dependency>
  1. 工具类
private GsonUtil() {}private static Gson gson = null;static {gson = new Gson();}/*** 将object对象转成json字符串** @param object* @return*/public static String getGsonByObject(Object object) {String gsonString = null;if (gson != null) {gsonString = gson.toJson(object);}return gsonString;}/*** 将gsonString转成泛型bean** @param gsonString* @param cls* @return*/public static <T> T gsonToBean(String gsonString, Class<T> cls) {T t = null;if (gson != null) {t = gson.fromJson(gsonString, cls);}return t;}/*** 转成list* 泛型在编译期类型被擦除导致报错* @param gsonString* @param cls* @return*/public static <T> List<T> gsonToList(String gsonString, Class<T> cls) {List<T> list = null;if (gson != null) {list = gson.fromJson(gsonString, new TypeToken<List<T>>() {}.getType());}return list;}/*** 转成list* 解决泛型问题* @param json* @param cls* @param <T>* @return*/public static <T> List<T> jsonToList(String json, Class<T> cls) {Gson gson = new Gson();List<T> list = new ArrayList<T>();JsonArray array = new JsonParser().parse(json).getAsJsonArray();for(final JsonElement elem : array){list.add(gson.fromJson(elem, cls));}return list;}/*** 转成list中有map的** @param gsonString* @return*/public static <T> List<Map<String, T>> gsonToListMaps(String gsonString) {List<Map<String, T>> list = null;if (gson != null) {list = gson.fromJson(gsonString,new TypeToken<List<Map<String, T>>>() {}.getType());}return list;}/*** 转成map的** @param gsonString* @return*/public static <T> Map<String, T> gsonToMaps(String gsonString) {Map<String, T> map = null;if (gson != null) {map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {}.getType());}return map;}
  1. 实体
@Data
public class UserDto {private Integer id;private String account;private String userName;private String idCard;private String Addr;
}
  1. 测试说明,程序封装200000个UserDto对象,测试10次。
  2. 序列化测试(Object转Json)
工具 次数 毫秒
gson 第1次 585
gson 第2次 463
gson 第3次 536
gson 第4次 626
gson 第5次 555
gson 第6次 521
gson 第7次 527
gson 第8次 448
gson 第9次 568
gson 第10次 696
  1. 反序列化(Json转Object)
工具 次数 毫秒
gson 第1次 357
gson 第2次 314
gson 第3次 319
gson 第4次 296
gson 第5次 289
gson 第6次 324
gson 第7次 301
gson 第8次 299
gson 第9次 313
gson 第10次 326

Fastjson

  1. 依赖
        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.29</version></dependency>
  1. 工具类
  private FastJsonUtil() {}private static SerializerFeature[] feature = {//解决FastJson循环引用的问题SerializerFeature.DisableCircularReferenceDetect,//排序SerializerFeature.SortField};private static SerializeConfig mapping = new SerializeConfig();static {mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));mapping.put(Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));//数据库的一个时间类型}/*** 将对象转换成JSON字符串 --固定时间格式"yyyy-MM-dd HH:mm:ss"** @param BO/VO,map,数组,list 对象* @return JSON字符串* @说明:对bean中有Date类型的数据可以成功转换成yyyy-MM-dd HH:mm:ss格式的时间类型,例如:"barDate":yyyy-MM-dd HH:mm:ss*/public static String getJsonByObj(Object bean) {return getJsonByObj(bean, mapping);}/*** 将对象转换成JSON字符串 --特定时间格式--所有Key为小写** @param BO/VO,map,数组,list 对象* @return JSON字符串* @dateType 时间格式转换后的字符串格式,例如yyyy-MM-dd HH:mm:ss* @说明:对bean中有Date类型的数据可以成功转换成yyyy-MM-dd HH:mm:ss格式的时间类型,例如:"barDate":yyyy-MM-dd HH:mm:ss*/public static String getJsonByObj(Object bean, String dateType) {SerializeConfig zdymapping = new SerializeConfig();zdymapping.put(Date.class, new SimpleDateFormatSerializer(dateType));return getJsonByObj(bean, zdymapping);}/*** 将对象转换成JSON字符串 ---效率高一些--不处理key 也不处理循环引用的问题--也不处理时间格式** @param BO/VO,map,数组,list 对象* @return JSON字符串* @说明:对bean中有Date类型的数据可以成功转换成long格式的时间类型,例如:"barDate":1458268099098*/public static String getJsonDefaultByObj(Object bean) {return JSON.toJSONString(bean);}/*** 将JSON数据转换为ListBean集合** @param <T>* @param json  JSON数组数据* @param calzz 待转换的Bean类型 --LinkedCaseInsensitiveMap* @return*/public static <T> List<T> getListBean(String json, Class<T> calzz) {return JSON.parseArray(json, calzz);}/*** 将JSON数据转换为List集合** @param <T>* @param json  JSON数组数据* @param calzz 待转换的Bean类型 --LinkedCaseInsensitiveMap* @return*/@SuppressWarnings({"rawtypes", "unchecked"})public static List getList(String json, Class calzz) {return getListBean(json, calzz);}/*** 将JSON数据转换为 Java Bea n对象** @param json  JSON字符串* @param calzz 待转换的Bean类型--LinkedCaseInsensitiveMap* @return*/public static <T> T getObjet(String json, Class<T> calzz) {return JSON.parseObject(json, calzz);}/**** 通用封装--获取json字符串* @param bean 对象* @param mappingx 时间类型计划等* @return*/private static String getJsonByObj(Object bean, SerializeConfig mappingx) {String json = JSON.toJSONString(bean, mappingx,  feature);json = stringToJson(json);return json; //所有Key为小写}/*** 当文本中含有如下特殊字符时,此方法可以成功处理,让其在前台被正确解析,注意:此法不能处理单引号** @param s* @return*/public static String stringToJson(String s) {StringBuffer sb = new StringBuffer();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);switch (c) {/*case '\"':sb.append("\\\"");break;*/case '\\':   //如果不处理单引号,可以释放此段代码,若结合下面的方法处理单引号就必须注释掉该段代码sb.append("\\\\");break;case '/':sb.append("\\/");break;case '\b':      //退格sb.append("\\b");break;case '\f':      //走纸换页sb.append("\\f");break;case '\n':sb.append("\\n"); //换行break;case '\r':      //回车sb.append("\\r");break;case '\t':      //横向跳格sb.append("\\t");break;default:sb.append(c);}}return sb.toString();}
  1. 实体
@Data
public class UserDto {private Integer id;private String account;private String userName;private String idCard;private String Addr;
}
  1. 测试说明,程序封装200000个UserDto对象,测试10次。
  2. 序列化测试(Object转Json)
工具 次数 毫秒
fastjson 第1次 651
fastjson 第2次 673
fastjson 第3次 632
fastjson 第4次 660
fastjson 第5次 669
fastjson 第6次 697
fastjson 第7次 719
fastjson 第8次 817
fastjson 第9次 669
fastjson 第10次 709
  1. 反序列化测试(Json转Object)
工具 次数 毫秒
fastjson 第1次 143
fastjson 第2次 140
fastjson 第3次 140
fastjson 第4次 158
fastjson 第5次 161
fastjson 第6次 159
fastjson 第7次 155
fastjson 第8次 158
fastjson 第9次 179
fastjson 第10次 157

Jackson

  1. 依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.6</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.6</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.6</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency>
  1. 工具类
private JacksonUtil() {}private static final ObjectMapper mObjectMapper = new ObjectMapper();private static final ObjectMapper mObjectMapperLowerCaseWithUnderScores = new ObjectMapper();//在这里进行配置全局static {//有时JSON字符串中含有我们并不需要的字段,那么当对应的实体类中不含有该字段时,会抛出一个异常,告诉你有些字段(java 原始类型)没有在实体类中找到//设置为false即不抛出异常,并设置默认值 int->0 double->0.0mObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);mObjectMapperLowerCaseWithUnderScores.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//序列化时添加下划线mObjectMapperLowerCaseWithUnderScores.setPropertyNamingStrategy(new PropertyNamingStrategy.SnakeCaseStrategy());}public static String beanToJson(Object object) {if (object != null) {try {return mObjectMapper.writeValueAsString(object);} catch (JsonProcessingException e) {System.out.println("bean to json exception");}}return "";}public static <T> T jsonToBean(String json, Class<T> classType) {if (StringUtils.isNotBlank(json) && classType != null) {try {return mObjectMapper.readValue(json, classType);} catch (IOException e) {System.out.println("json to bean exception");}}return null;}public static <T> List<T> jsonToList(String json, Class<T> classType) {if (StringUtils.isNotBlank(json) && classType != null) {try {return mObjectMapper.readValue(json, mObjectMapper.getTypeFactory().constructCollectionType(List.class, classType));} catch (IOException e) {System.out.println("json to list exception");}}return null;}public static <k, v> Map<k, v> jsonToMap(String json, Class<k> kType, Class<v> vType) {if (StringUtils.isNotBlank(json)) {try {return mObjectMapper.readValue(json, mObjectMapper.getTypeFactory().constructMapType(Map.class, kType, vType));} catch (IOException e) {System.out.println("json to Map exception");}}return null;}public static String beanToJsonByLowerCase(Object object) {if (object != null) {try {return mObjectMapperLowerCaseWithUnderScores.writeValueAsString(object);} catch (JsonProcessingException e) {System.out.println("bean to json with lowerCase exception");}}return "";}public static <T> T jsonToBeanByLowerCase(String json, Class<T> classType) {if (StringUtils.isNotBlank(json)) {try {return mObjectMapperLowerCaseWithUnderScores.readValue(json, classType);} catch (IOException e) {System.out.println("json to Bean with lowerCase exception");}}return null;}
  1. 实体
@Data
public class UserDto {private Integer id;private String account;private String userName;private String idCard;private String Addr;
}
  1. 测试说明,程序封装200000个UserDto对象,测试10次。
  2. 序列化测试(Object转Json)
工具 次数 毫秒
jackson 第1次 598
jackson 第2次 533
jackson 第3次 510
jackson 第4次 558
jackson 第5次 503
jackson 第6次 507
jackson 第7次 490
jackson 第8次 503
jackson 第9次 523
jackson 第10次 527
  1. 反序列化测试(Json转Object)
工具 次数 毫秒
jackson 第1次 412
jackson 第2次 374
jackson 第3次 276
jackson 第4次 316
jackson 第5次 311
jackson 第6次 311
jackson 第7次 327
jackson 第8次 318
jackson 第9次 317
jackson 第10次 304

小结

  1. 序列化比较结果(Object转Json)
工具 次数据 最快 最慢 平均
gson 10 468 696 552.5
fastjson 10 632 817 689.6
jackson 10 276 490 598
  1. 反序列化比较结果(Json转Object)
工具 次数据 最快 最慢 平均
gson 10 289 357 313.8
fastjson 10 140 179 155
jackson 10 276 412 326.6
  1. 结论
    序列化,三个工具类都差不多;反序列化fastjson很出色。所以以后在项目中直接使用fastjson工具类即可。

Gson、Fastjson和Jackson速度对比相关推荐

  1. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)

    Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...

  2. 主流JSON引擎性能比较(GSON,FASTJSON,JACKSON,JSONSMART)

    JsonPerformanceVS 主流JSON引擎性能比较(GSON,FASTJSON,JACKSON,JSONSMART) 文章目录 JsonPerformanceVS 前言 测试目的: Purp ...

  3. java byter是字节吗_GitHub - XXQAQ/Byter: 字节对象转换框架,一个基于字节的 Gson/FastJson...

    Byter 字节对象转换框架,一个基于字节的 Gson/FastJson 众所周知,Json数据的序列化内容就是字符串,如果说Gson/FastJson是基于字符串的Json转化框架,那么Byter就 ...

  4. 记一次FastJSON和Jackson解析json时遇到的中括号问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...

  5. Spring MVC--使用fastjson替换jackson来响应json数据

    使用fastjson替换jackson来响应json数据. springmvc-config.xml <?xml version="1.0" encoding="U ...

  6. javabean与json转换(fastjson与jackson两个版本)

    [README] 本文演示了 javabean与json转换的开发方式: 要想 javabean的属性名 与 json的字段名不一致,也是可以转换的: 之前需要引入 ali.fastjson < ...

  7. java中float、double和BigDecimal的精度问题(fastjson、Jackson以及实例化的方式)

    java中float.double和BigDecimal的精度问题(fastjson.Jackson以及实例化的方式): 问题描述 java中如果使用float或double类型的数据初始化BigDe ...

  8. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  9. 对象 和 json 互转 四种方式 json-lib、Gson、FastJson、Jackson

    文章目录 一. json-lib 二. Google的Gson 1.简介 2. 配置步骤 1. MAVEN 依赖引入 2. gsonUtil 工具类 3. 排除不要序列化的熟悉注解类 Exclude ...

最新文章

  1. PHP网站首页打不开的原因讲起
  2. 浮层java_通过遮罩层实现浮层DIV登录的js代码
  3. 在Ubuntu下解决E: 无法对目录 /var/lib/apt/lists/ 加锁的问题
  4. Centos7 ocsp功能验证
  5. Javaweb 第1天 HTML和CSS课程
  6. 安装asterisk 时遇到的报错情况,及解决办法。
  7. boost::contract模块实现volatile的测试程序
  8. Java适配器的设计模式
  9. DNS(BIND) 正向解析   反向解析 基本服务的搭建
  10. JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据【华为云分享】
  11. [转]Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
  12. OpenCV-获取图像中圆线上的数据
  13. linux fdisk指定ext4,如何在Linux中创建新的Ext4文件系统(分区)
  14. c51汇编语言如何定义全局变量_汇编语言程序访问C语言全局变量
  15. 阿里巴巴(杭州)转正答辩失败流水账
  16. php999换算人民币计算器,将cm换算为px (厘米换算为像素)
  17. 5个适合提升自己的自学网站,每一个都很强大, 适合职场人自我提升的学习网站,利用起来,离加薪更近一步
  18. Northleaf扩大业务开发团队,任命Chris O’Connor 为澳大利亚和新西兰地区董事总经理
  19. 在线绘制图表工具的使用
  20. 那些外卖cps饿了么一键领取最佳红包的公众号或者小程序怎么搭建?

热门文章

  1. 通过url获取文件名称
  2. 数据库安装报错:ins 30131
  3. 轻度体验威马Living Pilot智行辅助系统:前期刺激,后期依赖...
  4. burpsuite修改response欺骗伪造高五商
  5. 码农必备SQL高性能优化指南。35+条优化建议立马get
  6. Android 录制视频和音频以及音频播放
  7. UBUNTU 18.04开机自启动脚本实现--打开终端、执行命令及终端输入文字
  8. 移动端有哪些常见布局方式?
  9. onenote导入html文件,如何批量导入 Windows 的文件夹树状结构和 HTML 文件到 OneNote 里...
  10. 强省会 勇担当 长沙青商力量|云畅科技蔡鑫莹:让软件交付更简单