FastJson和Gson的简单比较
先用gson写一个util工具来感受下.
- public class JsonUtil {
-
- private static Gson gson = new GsonBuilder().setDateFormat("EEE MMM dd yyyy HH:mm:ss zzz").create();
-
- @SuppressWarnings({"unchecked","rawtypes"})
- public static Object readJson2Object(String json,Class className) {
- return gson.fromJson(json,className);
- }
-
-
- @NonNull
- @SuppressWarnings({"rawtypes","unchecked"})
- public static List readJson2List(String json,Class className) {
- return JSON.parseArray(json,className);
- List<Object> lists = new ArrayList();
- try {
- JsonParser jsonParser = new JsonParser();
- JsonElement jsonElement = jsonParser.parse(json);
- JsonArray jsonArray = jsonElement.getAsJsonArray();
- java.util.Iterator<JsonElement> it = jsonArray.iterator();
-
- while (it.hasNext()) {
- jsonElement = it.next();
- json = jsonElement.toString();
- Object obj = gson.fromJson(json,className);
- lists.add(obj);
- }
- } catch (IllegalStateException e) {
- return lists;
- }
- return lists;
- }
-
- @SuppressWarnings("rawtypes")
- public static String readList2Json(List list) {
- return gson.toJson(list);
- }
-
- public static String readObject2json(Object object) {
- return gson.toJson(object);
- }
可以看到,在装换List时候,gson还是挺麻烦的,其余都还可以接受.
再来看下用fastJson写的情况.
- import com.alibaba.fastjson.JSON;
-
- public class JsonUtil {
- public static Object readJson2Object(String json,Class className) {
- return JSON.parSEObject(json,className);
- }
-
- public static List readJson2List(String json,className);
- }
-
- public static String readList2Json(List list) {
- return JSON.toJSONString(list);
- }
-
- public static String readObject2json(Object object) {
- return JSON.toJSONString(object);
- }
以上是使用fastJson 写的一个util.完全可以满足我们一般json转化的需求,而且我们可以看到,相当的简洁.
而且有针对List
优化过.可以快速的转化!!
当然,两者不仅仅只有这样的区别,来看看性能上的
[ 测试内容请点击 ]
测试结果如下.
- JSON转Bean,5个线程并发,约200字节对象,1千万次转换:
比较 | fastJson | gson |
---|---|---|
吞吐量 | 64113.7 | 13952.8 |
总耗时 | 155 | 700 |
* Bean转JSON,5个线程并发,约200字节对象,1千万次转换:**
项目 | Jackson | gson |
---|---|---|
吞吐量 | 54802 | 17308.2 |
总耗时(秒) | 181 | 560 |
可以看到,完全fastJson完全碾压Gson.请少年早日脱离gson这个,换上fastJson
maven地址如下:
http://mvnrepository.com/artifact/com.alibaba/fastjson
csdn这个编辑界面也是挺货不对板的,在编辑器看是一个样子,最后的效果是一个样子.跪了….就是完全不时尚的样子
1. JSONField 介绍
- package com.alibaba.fastjson.annotation;
- public @interface JSONField {
- // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
- int ordinal() default 0;
- // 指定字段的名称
- String name() default "";
- // 指定字段的格式,对日期格式有用
- String format() default "";
- // 是否序列化
- boolean serialize() default true;
- // 是否反序列化
- boolean deserialize() default true;
- }
2. JSONField配置方式
FieldInfo可以配置在getter/setter方法或者字段上。例如:
2.1 配置在getter/setter上
- public class A {
- private int id;
- @JSONField(name="ID")
- public int getId() {return id;}
- @JSONField(name="ID")
- public void setId(int value) {this.id = id;}
- }
2.2 配置在field上
- public class A {
- @JSONField(name="ID")
- private int id;
- public int getId() {return id;}
- public void setId(int value) {this.id = id;}
- }
3. 使用format配置日期格式化
- public class A {
- // 配置date序列化和反序列使用yyyyMMdd日期格式
- @JSONField(format="yyyyMMdd")
- public Date date;
- }
4. 使用serialize/deserialize指定字段不序列化
- public class A {
- @JSONField(serialize=false)
- public Date date;
- }
- public class A {
- @JSONField(deserialize=false)
- public Date date;
- }
5. 使用ordinal指定字段的顺序
缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
- public static class VO {
- @JSONField(ordinal = 3)
- private int f0;
- @JSONField(ordinal = 2)
- private int f1;
- @JSONField(ordinal = 1)
- private int f2;
- }
一切别的常见问题看下面链接
https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98