1. 程式人生 > >Android總結之json解析(FastJson Gson 對比)

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對實體屬性是忽略大小寫的,真是一個神奇的東西。 

相關推薦

Android總結json解析FastJson Gson 對比

前言: 最近為了統一專案中使用的框架,發現專案中用到了兩種json解析框架,他們就是當今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,為了廢除其中一個所以來個效能和使用的大比拼。 FastJson簡介:Fastjson是一個Java語言編寫的JSON處理器,由阿里巴巴公

Android專案JSON解析3種解析技術詳解

前言: 在我寫部落格前再宣告一下,我希望轉載我文章的某某某記得註明:(),要尊重我的勞動成果,這樣才能給我更多的支援和鼓勵!差不多有3天沒有寫部落格了,要想的、要做的事情太多了,額....原歸正傳,今天接著上一篇部落格:Android專案之JSON解析(扯淡),繼續分享我對

Android網路資料解析----使用Google Gson解析Json資料

<span style="font-size:18px;">一、Json資料的介紹

JavaJSON處理JSONObject、JSONArray

比較 刪除 sonar map move 屬性 pri color zhang 依賴包:json-20180130.jar MAVEN地址: 1 <dependency> 2 <groupId>org.jso

Android複習旅--ViewPager應用引導頁

對於ViewPager,相信大家都不陌生,ViewPager在應用中的使用頻率和ListView是有得一拼的。而ViewPager最常用於三個場景,分別是應用的新手引導頁,廣告輪播控制元件,和Fragment結合做應用內的標籤頁。 由於網上已經有很多關於ViewPager的博文了,寫

scala-val物件例項化變數卻可以更改深度解析小白適用

類和物件可能都很熟悉了,這裡僅供小白參考,大神請虐過。一開始學的時候物件是類的藍圖,啥,藍圖,什麼鬼?我們直接看程式碼吧~ import scala.io.Source class ChecksumAccumulator(){ var sum = 0 }

設計模式總結TemplateMethod Pattern模版方法模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: TemplateMethod Pattern(模版方法模式) 意圖 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個演算法的結構即可重定義該演算法的

設計模式總結Builder Pattern建造者模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Builder Pattern(建造者模式) 意圖 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。適用性 * 當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。

設計模式總結Flyweight Pattern享元模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Flyweight Pattern(享元模式) 意圖 運用共享技術有效地支援大量細粒度的物件。適用性 當以下所有的條件都滿足時,可以考慮使用享元模式: * 一個應用程式使用了大量的物件。 * 完全由於使用大量

設計模式總結Bridge Pattern橋接模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Bridge Pattern(橋接模式) 意圖 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 【GOF95】在提出橋樑模式的時候指出,橋樑模式的用意是"將抽象化(Abstraction)與實現化(I

JSON 解析工具的封裝FastJSON-->Java

str ras bool return pass pre mail lar 格式化json 1.添加依賴包 <dependency> <groupId>com.alibaba</groupId> <a

androidJSON解析

Json解析 JavaScrip物件表示法(JavaScript Object Notation)JSON屬於輕量級文字資料交換格式 JSon獨立於平臺和語言JSON具有自我描述性更易於理解 類似Xml,比Xml更小,更快,更易解析 Json檔案

Android-json解析:原生JSONObject+JSONArray的解析、遍歷及生成等

一、JSONObject和JSONArray的資料表示形式 JSONObject的資料是用 { } 來表示的, 例如: { "id":"1", "courseID":"化學", "title":"滴定實驗",

Gson解析List和Map格式json資料

主要解析 兩種格式 列表格式 和 map格式 常用的是列表解析,以前不知道解析map,就用json配合gson使用,今天在論壇看到有人問,就試了一下才發現 解析map也很方便,哇喔,又漲姿勢了.. public class jsonParse{ c

Android-json解析:Jackson的使用

使用Jackson,主要是使用writeValueAsString和readValue這兩個方法。此外,Jackson的writeValue和readValue有很多種引數型別,適用於多中場合。 1、匯入依賴 compile 'com.faste

Android 網路獲取資料Json解析

1.簡介 JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。 JSON資料作為目前網路中主流的資料傳輸格式之一,應用十分廣泛。 2. Json資料格式(兩種) Json資料有兩種格式: (1)物件 :物件表示

Gson庫和Android自帶JSON解析對轉義字元的處理存在不同

遇到一坑,以前用的是Gson庫,現在改為Android自帶的JSON解析,後端收到資料有時會解析失敗,查詢原因,發現Gson庫和Android自帶JSON解析對轉義字元的處理存在稍許的不同。 舉例如下: String s1 = "https://blog

Android開發JSON資料解析詳解(二)

在上一篇我們講解了Android開發JSON的基本介紹以及JSON的資料結構等, 今天我們來講解一下JSON的工作原理以及基本用法: JSON解析分為兩種情況,一種是在伺服器端解析,另一種是在客戶端解析 第一種:在伺服器段解析:    通常,客戶端在請求伺服器資料時,伺服器

Android okHttp網路請求Json解析

  前言:   前面兩篇文章介紹了基於okHttp的post、get請求,以及檔案的上傳下載,今天主要介紹一下如何和Json解析一起使用?如何才能提高開發效率?      okHttp相關文章地址:  關於Json解析:   本文的Json解析採用阿里巴巴的FastJson 解析,也可以採用Gso

java中使用Gsonjson解析轉載

下面小編將通過以下幾點來進行json的講解 1.什麼是JSON? (http://www.json.org/) JSON (JavaScript Object Notation) is a lightweight data-intercha