zoukankan      html  css  js  c++  java
  • Android总结之json解析(FastJson Gson 对比)

    前言:

    最近为了统一项目中使用的框架,发现项目中用到了两种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对实体属性是忽略大小写的,真是一个神奇的东西。 

  • 相关阅读:
    [LeetCode 题解]: Triangle
    [LeetCode 题解]: pow(x,n)
    [LeetCode 题解]: plusOne
    [LeetCode 题解]: ZigZag Conversion
    error: field 'b' has imcomplete type
    两个分数的最小公倍数
    DDR工作原理
    流水线技术原理和Verilog HDL实现
    FPGA主要应用
    提高器件工作的速度
  • 原文地址:https://www.cnblogs.com/whoislcj/p/5468420.html
Copyright © 2011-2022 走看看