码迷,mamicode.com
首页 > 移动开发 > 详细

Android平台json解析(FastJson Gson 大比拼)

时间:2016-05-07 16:22:51      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

前言:

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

FastJson 当前使用版本 fastjson-1.2.11.jar 下载地址http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.11/

对象转化成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 当前使用版本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对实体属性是忽略大小写的,真是一个神奇的东西。

 

Android平台json解析(FastJson Gson 大比拼)

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!