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. 从难免的线上bug说起代码的思考
  2. python websocket 客户端_aiohttp Websocket客户端和HTTP
  3. python加载shellcode免杀 简介
  4. java properties更新_对Java配置文件Properties的读取、写入与更新操作
  5. j2me程序发布到手机
  6. python手枪_Python入门,爬虫训练——枪械查询
  7. C++设计模式-备忘录模式
  8. pandas 导入excel_三行Python代码,合并多个Excel文件
  9. JAVA IO - 高效读取大文件的后几行
  10. 监控视频中人的特征识别
  11. 23.docker export
  12. ubuntu环境下载android源码
  13. 攒机笔记十六:制作pe盘
  14. (七)练习:美萍酒店管理系统中系统设置的房间管理选项卡部分测试
  15. 如何将在ad里面添加元器件符号_请教怎么在AD10中的PCB中直接加入自己创建的封装库文件中的元件...
  16. Sugar BI数据可视化图表标注
  17. 火爆!GitHub 标星 144k 的前后端学习路线,2021 年最新整理,看完后不再迷茫不再徘徊
  18. win10下PHP开发环境搭建
  19. MinGW MinGW-W64介绍
  20. 云服务器系统分区,云服务器系统盘可以分区

热门文章

  1. Java锁定座位功能_自习室管理系统,基于B/S模式下的JAVA系统
  2. 怎么区分有限合伙人和普通合伙人
  3. 2021年起重机械指挥考试及起重机械指挥考试题库
  4. phalapi使用redis做MQ队列
  5. webservice框架 java_Java CXF WebService框架 开发入门案例
  6. TLB之flush操作[二]
  7. Xcode 安装Command Line Tools
  8. android 充电模式deamon_安兔兔公布6月Android手机性价比排行榜
  9. 音频1-基础知识(硬件,音频相关概念)
  10. UWB技术之物理层和测距方法接收