fastJson和Gson的比较

14 篇文章 0 订阅

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, Class className) {
        return JSON.parseArray(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千万次转换:
比较fastJsongson
吞吐量64113.713952.8
总耗时155700

* Bean转JSON,5个线程并发,约200字节对象,1千万次转换:**

项目Jacksongson
吞吐量5480217308.2
总耗时(秒)181560

可以看到,完全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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值