Android总结之json解析(FastJson Gson 对比)

原文地址:http://www.cnblogs.com/whoislcj/p/5468420.html

前言:

最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和使用的大比拼。

FastJson简介:Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。

当前版本: fastjson-1.2.14.jar

下载地址http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.14/

对象转化成json:

复制代码
    /**
     * 对象转化为json fastjson 使用方式
     *
     * @return
     */
    public static String objectToJsonForFastJson(Object object) {
        if (object == null) {
            return "";
        }
        try {
            return JSON.toJSONString(object);
        } catch (JSONException e) {
        } catch (Exception e) {
        }
        return "";
    }
复制代码

json转化成对象:

复制代码
  /**
     * json转化为对象  fastjson 使用方式
     *
     * @return
     */
    public static <T> T jsonToObjectForFastJson(String jsonData, Class<T> clazz) {
        if (TextUtils.isEmpty(jsonData)) {
            return null;
        }
        try {
            return parseObject(jsonData, clazz);
        } catch (Exception e) {
        }
        return null;
    }
复制代码

json转化成List:

复制代码
 /**
     *json转化为List  fastjson 使用方式
     */
    public static List jsonToListForFastJson(String jsonData) {
        if (TextUtils.isEmpty(jsonData)) {
            return null;
        }
        List arrayList = null;
        try {
            arrayList =  parseObject(jsonData,new TypeReference<ArrayList>(){});
        } catch (Exception e) {
        }
        return arrayList;

    }
复制代码

json转化这Map:

复制代码
    /**
     *json转化为Map  fastjson 使用方式
     */
    public static Map jsonToMapForFastJson(String jsonData){
        if (TextUtils.isEmpty(jsonData)) {
            return null;
        }
        Map map = null;
        try{
            map =  parseObject(jsonData,new TypeReference<Map>(){});
        }catch (Exception e){
            e.printStackTrace();
        }
        return map;
    }
复制代码

Gson 简介:Gson由谷歌研发,可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。

当前版本2.40  

使用方式  build.gradle 中配置 compile 'com.google.code.gson:gson:2.4'

对象转化json:

复制代码
  /**
     * 对象转化为json对象  Gson 使用方式
     *
     * @return
     */
    public static String objectToJsonForGson(Object object) {
        if (object == null) {
            return "";
        }
        Gson gson;
        try {
            gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            return gson.toJson(object);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
复制代码

json转化成对象:

复制代码
 /**
     * json转化为对象  Gson 使用方式
     *
     * @return
     */

    public static <T> T jsonToObjectForGson(String jsonData, Class<T> clazz) {
        if (TextUtils.isEmpty(jsonData)) {
            return null;
        }
        T finalResult = null;
        try {
            Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            finalResult = gson.fromJson(jsonData, clazz);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return finalResult;
    }
复制代码

json转化成List:

复制代码
  /**
     *json转化为集合  Gson 使用方式
     */
    public static List jsonToListForForGson(String jsonData) {
        if (TextUtils.isEmpty(jsonData)) {
            return null;
        }
        List list = null;
        try {
            Type listType = new TypeToken<ArrayList>() {
            }.getType();
            Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            list = gson.fromJson(jsonData, listType);
        } catch (Exception e) {
        }
        return list;
    }
复制代码

json转化为Map:

复制代码
  /**
     *json转化为Map  fastjson 使用方式
     */
    public static Map jsonToMapForForGson(String jsonData){
        if (TextUtils.isEmpty(jsonData)) {
            return null;
        }
        Map map = null;
        try {
            Type listType = new TypeToken<Map>() {
            }.getType();
            Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            map = gson.fromJson(jsonData, listType);
        } catch (Exception e) {
        }
        return map;
    }
复制代码

测试性能程序:

第一步:首先创建一个实体对象Person

复制代码
public class Person {

    private String name;//姓名
    private int age;//年龄

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
复制代码

第二部:创建一个测试集合:

复制代码
      List<Person> personList=new ArrayList<>();
        int testMaxCount=1000;//测试的最大数据条数 
        //添加测试数据
        for(int i=0;i<testMaxCount;i++){
            Person person =new Person();
            person.setAge(i);
            person.setName(String.valueOf(i));
            personList.add(person);
        }
复制代码

分别执行两者的转化和解析代码:

复制代码
        //FastJson生成json数据
        long start=System.currentTimeMillis();
        String jsonData=JsonUtils.objectToJsonForFastJson(personList);
        long end=System.currentTimeMillis();
        Log.e("MainActivity","FastJson生成json数据 cost time---->"+(end-start));


        //FastJson解析json数据
        start=System.currentTimeMillis();
        List<Person> tempPersons=JsonUtils.jsonToListForFastJson(jsonData);
        end=System.currentTimeMillis();
        Log.e("MainActivity","FastJson解析json数据 cost time---->"+(end-start));

        //Gson生成json数据
         start=System.currentTimeMillis();
         jsonData=JsonUtils.objectToJsonForGson(personList);
         end=System.currentTimeMillis();
         Log.e("MainActivity","Gson生成json数据 cost time---->"+(end-start));

        //Gson解析json数据
        start=System.currentTimeMillis();
        List<Person> tempPersons1=JsonUtils.jsonToListForForGson(jsonData);
        end=System.currentTimeMillis();
        Log.e("MainActivity","Gson解析json数据 cost time---->"+(end-start));
复制代码

重点看执行结果:单位毫秒(执行时间)

两者转换性能对比:1000条    10000条  100000条  200000条

fastJson :           45           289         4010        8396

Gson     :           60           724         4071        8803

 

两者解析性能对比:1000条    10000条  100000条  200000条

fastJson :           55           552        3826        8638

Gson     :           45           465         5942        9668

总结:在数据量比较小的情况下,两者性能相差无几,在数据量比较大的情况下FastJson还是有优势的。

插曲:为了项目省事,本人把FastJson给删除了,结果项目中遗留了一些代码编写不规范的情况,比如userId 写成了useid 但是json数据中返回的是userId,之前用FastJson一直正常这才发现原来FastJson对实体属性是忽略大小写的,真是一个神奇的东西。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值