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

前言:

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

时间: 2024-10-15 17:26:33

Android平台json解析(FastJson Gson 大比拼)的相关文章

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

Android应用之——谷歌官方Json解析工具Gson的使用

一.Gson简介 Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象.也就是Java对象与json字符串间的互相转换,解析. 二.使用方法 Gson的应用主要为toJson与fromJson两个转换函数,而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象.即先创建好对应的javabean,javabean中的字段与要转换的

【Android开发经验】超好用的json解析工具——Gson项目使用介绍

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在上一篇文章中,我们简单的介绍了json数据格式,并介绍了如何使用Android自带的json工具,完成json数据的生成与解析.但是就像我所说的,自带的工具类太难用了!因此这篇文章,会介绍一个json解析的非常好的工具,那就是google的开源项目Gson. 咱们这次不介绍Gson里面的常用类了,因为常用的几个类非常的简单,我们直接上手开始用,看看Gson是多么的强大! 当然,如果使用第三方的项目,我们

Android 之json解析2

JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换. JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. Json建构于两种结构: 1.“名称/值”对的集合(A collection of name

浅谈Android项目----JSON解析(4种解析技术详解)

json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 3.json比xml数据传输的有效性要高出很多 Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高开发者的效率和降低出错的可能.因此,通常情况下,我们都会选择其他优秀的JSON解析实现,用以替代系统的API,目前JSON解析的开源实现主要包括一

json解析之gson

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象. Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 对于泛型对象,使用fromJson(String, Type)方法来将Json对象转换成对应的泛型对象 new TypeToken<>(){}.getType()方法取得Typ

Json解析与Gson解析

本文主要介绍json最原始的解析与google提供的gson工具类解析 ①json解析 1 /** 2 * 普通的json解析 3 * @param s 4 * @throws JSONException 5 */ 6 private void jsonJieXi(String s) throws JSONException { 7 //创建json对象 8 JSONObject jsonObject1 = new JSONObject(s); 9 String retcode = jsonOb

Android项目--Json解析

在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了.只能更新到2014年3月4日. 不过有些东西,哪来学习一下,也是可以的. 比如:http://m.weather.com.cn/data/101050101.html { "weatherinfo": { "city": "哈尔滨", "city_en": "haerbin", "date_y": "

Android之JSON解析

做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSON格式,XML格式的数据在处理时相对比较繁琐,并且Android为我们提供了两个解析JSON对象的类:JSONObject与JSONArray这两个对象可以很好的满足我们的需求,JSONArray对象可以以数组的形式将数据返回到手机,JSONObject对象则可以以对象的形式将数据为我们封装好返回,