博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jackson VS FastJson VS Gson
阅读量:6692 次
发布时间:2019-06-25

本文共 10194 字,大约阅读时间需要 33 分钟。

hot3.png

package com.dj.json.model;import java.util.Date;import java.util.List;import java.util.Map;public class People {	private String name;	private FullName fullName;	private int age;	private Date birthday;	private List
 hobbies; private Map
 clothes; private List
 friends;         // auto get set}public class FullName { private String firstName; private String middleName; private String lastName;  // auto get set}package com.dj.json.utils.fastjson;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.SerializerFeature;public class FastJsonUtils { public static String bean2Json(Object obj) {  return JSON.toJSONString(obj); } public static String bean2Json(Object obj,String dateFormat) { return JSON.toJSONStringWithDateFormat(obj, dateFormat, SerializerFeature.PrettyFormat);  } public static 
 T json2Bean(String jsonStr, Class
 objClass) { return JSON.parseObject(jsonStr, objClass); }}public class GsonUtils { private static Gson gson = new GsonBuilder().create(); public static String bean2Json(Object obj) { return gson.toJson(obj); } public static 
 T json2Bean(String jsonStr, Class
 objClass) { return gson.fromJson(jsonStr, objClass); } public static String jsonFormatter(String uglyJsonStr) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJsonStr); String prettyJsonString = gson.toJson(je); return prettyJsonString; }}package com.dj.json.utils.jackson;import java.nio.charset.Charset;import java.text.SimpleDateFormat;import java.util.concurrent.ConcurrentLinkedQueue;import org.apache.commons.lang.StringUtils;import org.codehaus.jackson.map.DeserializationConfig;import org.codehaus.jackson.map.ObjectMapper;import org.codehaus.jackson.map.ser.StdSerializerProvider;import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;import org.codehaus.jackson.map.ser.std.NullSerializer;import org.codehaus.jackson.type.TypeReference;/** * @description: jsonUtils 工具类 * @version Ver 1.0 * @author 
dejianliu * @Date 2013-4-23 下午12:32:29 */public class JsonUtils { private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); static boolean isPretty = false; private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; static StdSerializerProvider sp = new StdSerializerProvider(); static { sp.setNullValueSerializer(NullSerializer.instance); }   static SimpleDateFormat defaultDateFormat = new SimpleDateFormat(DEFAULT_DATE_FORMAT); public static ConcurrentLinkedQueue
 mapperQueue = new ConcurrentLinkedQueue
(); public static ObjectMapper getObjectMapper() { ObjectMapper mapper = mapperQueue.poll(); if(mapper == null) { mapper = new  ObjectMapper(null, sp, null); } return mapper; } public static void returnMapper(ObjectMapper mapper) { if(mapper != null) { mapperQueue.offer(mapper); } } public static boolean isPretty() { return isPretty; } public static void setPretty(boolean isPretty) { JsonUtils.isPretty = isPretty; } /**  * JSON串转换为Java泛型对象,可以是各种类型,此方法最为强大。用法看测试用例。  *   * @param 
 * @param jsonString  *            JSON字符串  * @param tr  *            TypeReference,例如: new TypeReference< List
 >(){}  * @return List对象列表  */ @SuppressWarnings("unchecked") public static 
 T json2GenericObject(String jsonString,TypeReference
 tr, String dateFormat) { if (StringUtils.isNotEmpty(jsonString)) { ObjectMapper mapper = getObjectMapper();  try {// ObjectMapper objectMapper = new ObjectMapper(null, sp, null); mapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);  if (StringUtils.isBlank(dateFormat)) { mapper.setDateFormat(defaultDateFormat); } else { SimpleDateFormat sdf = (SimpleDateFormat) defaultDateFormat.clone(); sdf.applyPattern(dateFormat); mapper.setDateFormat(sdf);  } return (T) mapper.readValue(jsonString, tr); } catch (Exception e) {  e.printStackTrace(); } finally { returnMapper(mapper); } } return null; } /**  * Json字符串转Java对象  *   * @param jsonString  * @param c  * @return  */ public static 
 T json2Object(String jsonString, Class
 c,String dateFormat) { if (StringUtils.isNotEmpty(jsonString)) { ObjectMapper mapper = getObjectMapper();  try { // ObjectMapper objectMapper = new ObjectMapper(null, sp, null); mapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);  if (StringUtils.isBlank(dateFormat)) { mapper.setDateFormat(defaultDateFormat); } else { SimpleDateFormat sdf = (SimpleDateFormat) defaultDateFormat.clone(); sdf.applyPattern(dateFormat); mapper.setDateFormat(sdf); } return (T)mapper.readValue(jsonString, c); } catch (Exception e) { e.printStackTrace(); } finally { returnMapper(mapper); } } return null; } /**  * Java对象转Json字符串  *   * @param object  *            目标对象  * @param executeFields  *            排除字段  * @param includeFields  *            包含字段  * @param dateFormat  *            时间格式化  * @param isPretty  *            是否格式化打印 default false  * @return  */ public static String toJson(Object object, String[] executeFields, String[] includeFields, String dateFormat) { String jsonString = ""; ObjectMapper mapper = getObjectMapper();  try { BidBeanSerializerFactory bidBeanFactory = BidBeanSerializerFactory.instance; if (StringUtils.isBlank(dateFormat)) { mapper.setDateFormat(defaultDateFormat); } else { SimpleDateFormat sdf = (SimpleDateFormat) defaultDateFormat.clone(); sdf.applyPattern(dateFormat); mapper.setDateFormat(sdf); } if (includeFields != null) { String filterId = "includeFilter"; mapper.setFilters(new SimpleFilterProvider().addFilter( filterId, SimpleBeanPropertyFilter .filterOutAllExcept(includeFields))); bidBeanFactory.setFilterId(filterId); mapper.setSerializerFactory(bidBeanFactory); } else if (includeFields == null && executeFields != null) { String filterId = "executeFilter"; mapper.setFilters(new SimpleFilterProvider().addFilter( filterId, SimpleBeanPropertyFilter .serializeAllExcept(executeFields))); bidBeanFactory.setFilterId(filterId); mapper.setSerializerFactory(bidBeanFactory); }  if (isPretty) { jsonString = mapper.writerWithDefaultPrettyPrinter() .writeValueAsString(object); } else { jsonString = mapper.writeValueAsString(object); } } catch (Exception e) { e.printStackTrace(); } finally { returnMapper(mapper); } return jsonString; } }package com.dj.json.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.dj.json.model.FullName;import com.dj.json.model.People;import com.dj.json.utils.fastjson.FastJsonUtils;import com.dj.json.utils.jackson.JacksonUtils;import com.dj.json.utils.jackson.JsonUtils;/** *GSON 序列化:1000000 笔数据  cost :21587 毫秒  平均:46324.176587761154 笔/秒 *JACKSON 序列化:1000000 笔数据  cost :9284 毫秒  平均:107712.19302024988 笔/秒 *FastJSON 序列化:1000000 笔数据  cost :9180 毫秒  平均:108932.46187363834 笔/秒 * @version : Ver 1.0 * @author : 
liudejian * @date : 2014-12-10 上午10:50:27 */public class JsonSer { private static People p; private static int num = 1000000; private static People createAPeople(String name, List
 friends) { People newPeople = new People(); newPeople.setName(name); newPeople.setFullName(new FullName("xxx_first", "xxx_middle", "xxx_last")); newPeople.setAge(24); List
 hobbies = new ArrayList
(); hobbies.add("篮球"); hobbies.add("游泳"); hobbies.add("coding"); newPeople.setHobbies(hobbies); Map
 clothes = new HashMap
(); clothes.put("coat", "Nike"); clothes.put("trousers", "adidas"); clothes.put("shoes", "安踏"); newPeople.setClothes(clothes); newPeople.setFriends(friends); return newPeople; } public static void main(String[] args) throws Exception { List
 friends = new ArrayList
(); friends.add(createAPeople("小明", null)); friends.add(createAPeople("Tony", null)); friends.add(createAPeople("陈小二", null)); p = createAPeople("邵同学", friends); long startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) {// GsonUtils.bean2Json(p);//  JacksonUtils.bean2Json(p); JsonUtils.toJson(p,null, null, "yyyy-MM-dd");//  FastJsonUtils.bean2Json(p,"yyyy-MM-dd"); } long endTime = System.currentTimeMillis(); long dif = endTime - startTime; System.out.println("序列化:" + num + " 笔数据  cost :" + dif + " 毫秒 " + " 平均:" + (Double.valueOf(num) / Double.valueOf(Double.valueOf(dif) / 1000) + " 笔/秒")); }}import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.dj.json.model.FullName;import com.dj.json.model.People;import com.dj.json.utils.jackson.JsonUtils;/** *GSON   反序列化:1000000 笔数据  cost :21456 毫秒  平均:46607.00969425802 笔/秒 *JACKSON  反序列化:1000000 笔数据  cost :13362 毫秒  平均:74839.095943721 笔/秒  *FastJSON  反序列化:1000000 笔数据  cost :36814 毫秒  平均:27163.579073178684 笔/秒 * @version : Ver 1.0 * @author : 
liudejian * @date : 2014-12-10 上午10:50:27 */public class JsonDesc { private static People p; private static int num = 1000000; private static People createAPerson(String name, List
 friends) { People newPerson = new People(); newPerson.setName(name); newPerson.setFullName(new FullName("xxx_first", "xxx_middle", "xxx_last")); newPerson.setAge(24); List
 hobbies = new ArrayList
(); hobbies.add("篮球"); hobbies.add("游泳"); hobbies.add("coding"); newPerson.setHobbies(hobbies); Map
 clothes = new HashMap
(); clothes.put("coat", "Nike"); clothes.put("trousers", "adidas"); clothes.put("shoes", "安踏"); newPerson.setClothes(clothes); newPerson.setFriends(friends); return newPerson; } public static void main(String[] args) throws Exception { List
 friends = new ArrayList
(); friends.add(createAPerson("小明", null)); friends.add(createAPerson("Tony", null)); friends.add(createAPerson("陈小二", null)); p = createAPerson("邵同学", friends); String jsonStr = JsonUtils.toJson(p, null, null, null);  System.out.println(jsonStr); long startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { GsonUtils.json2Bean(jsonStr, People.class); JsonUtils.json2Object(jsonStr, People.class, "yyyy-MM-dd");// JacksonUtils.json2Bean(jsonStr, People.class);//   FastJsonUtils.json2Bean(jsonStr, People.class); } long endTime = System.currentTimeMillis(); long dif = endTime - startTime; System.out.println("反序列化:" + num + " 笔数据  cost :" + dif + " 毫秒 " + " 平均:" + (Double.valueOf(num) / Double.valueOf(Double.valueOf(dif) / 1000) + " 笔/秒")); }}

转载于:https://my.oschina.net/zuiwoxing/blog/354860

你可能感兴趣的文章
Windows Server 08 R2+SQL 08 R2群集部署SOP系列
查看>>
数据结构与算法学习(三)(续)
查看>>
数据结构与算法学习(六)(续)
查看>>
我的友情链接
查看>>
[转载]信息化发展阶段的划分
查看>>
网页制作常用代码
查看>>
第10章 关联容器
查看>>
自动化运维工具ansible源码安装方法
查看>>
hyperscan 安装
查看>>
C语言基础之--printf函数
查看>>
Linux中环境变量文件及配置
查看>>
我的友情链接
查看>>
菜鸟学Linux 第106篇笔记 cobbler
查看>>
Realm数据库简介
查看>>
windows7快速切换ip批处理
查看>>
第二章 LYNC2010产品功能介绍
查看>>
Linux基础--进程管理和作业控制
查看>>
Linux 查看服务器开放的端口号
查看>>
left join on 和where条件的放置
查看>>
关于电脑程序无响应的常见原因以及解决办法
查看>>