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資料的介紹
Java之JSON處理(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
android之JSON解析
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中使用Gson對json解析(轉載)
下面小編將通過以下幾點來進行json的講解 1.什麼是JSON? (http://www.json.org/) JSON (JavaScript Object Notation) is a lightweight data-intercha