Android学习手册:JSON解析工具比较
JSON是一種輕量級的數據交換格式,具有良好的可讀性和便于快速編寫的特性。可以在不同的平臺間進行數據交換。JSON是JavaScript對象表示語法的子集。JSON的值由數字(整數或浮點數)、字符串(在雙引號內)、邏輯值(true或false)、數組(使用方括號[]包圍)、對象(使用花括號{}包圍)、null等組成,JSON中有且只有兩種結構:對象和數組。
- 對象:在JSON數據中是{ }括起來的內容,數據結構為{key:value,key:value,…}的鍵值對結構。在面向對象的語言中,key為對象的屬性,value為對應的屬性值,屬性值的類型可以是數字、字符串、數組、對象等。
- 數組:在JSON中是[ ]擴起來的內容,數據結構為[“java”,“c”,“c++”,…],使用索引獲取值,字段值的類型可以是數字、字符串、數組、對象等。
Android解析JSON數據的方法和XML解析類似,主要有兩種: 基于事件驅動和基于文檔驅動解析方式
- 基于事件驅動
主流方式:Gson解析和Jackson解析 - 基于文檔驅動
主流方式:Android Studio自帶org.json解析
解析方式:基于文檔驅動,類似于XML的DOM解析方法,先把全部文件讀入到內存中,然后遍歷所有數據,然后根據需要檢索想要的數據。
一、json-lib
json-lib最開始的也是應用最廣泛的json解析工具,json-lib 不好的地方確實在于依賴于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,對于復雜類型的轉換,json-lib對于json轉換成bean還有缺陷,比如一個類里面會出現另一個類的list或者map集合,json-lib從json到bean的轉換就會出現問題。
json-lib在功能和性能上面都不能滿足現在互聯網化的需求。
二、Jackson
相比json-lib框架,Jackson所依賴的jar包較少,簡單易用并且性能也要相對高些。而且Jackson社區相對比較活躍,更新速度也比較快。
Jackson對于復雜類型的json轉換bean會出現問題,一些集合Map,List的轉換出現問題。
Jackson對于復雜類型的bean轉換Json,轉換的json格式不是標準的Json格式。
解析原理:
基于事件驅動,與GSON相同,先創建一個對應于JSON數據的JavaBean類就可以通過簡單的操作解析出所需JSON數據。但和Gson解析不同的是,GSON可按需解析,即創建的JavaBean類不一定完全涵蓋所要解析的JSON數據,按需創建屬性,但Jackson解析對應的JavaBean必須把Json數據里面的所有key都有所對應,即必須把JSON內的數據所有解析出來,無法按需解析。但Jackson的解析速度和效率都要比GSON高
三、org.json
org.json為官方提供的JSON數據解析方法,解析代碼非常簡單。由于JSON數據只有JSON對象和JSON數組兩種結構,因此org.json包提供了JSONObject和JSONArray兩個類對JSON數據進行解析。
- 使用JSONObject來解析JSON對象
- 使用JSONArray來解析JSON數組
將服務器返回的JSON數據傳入一個JSONObject對象中,然后循環遍歷這個JSONArray,從中取出的每一個數據都是JSONObject對象,接下來調用getString()方法將JSONObject對象所包含的數據取出。
四、GSON(Google)
Gson是目前功能最全的Json解析神器,Gson當初是為因應Google公司內部需求而由Google自行研發而來,但自從在2008年五月公開發布第一版后已被許多公司或用戶應用。
Gson的應用主要為toJson與fromJson兩個轉換函數,無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
而在使用這種對象轉換之前,需先創建好對象的類型以及其成員,才能成功的將JSON字符串成功轉換成相對應的對象。
類里面只要有get和set方法,Gson完全可以將復雜類型的json到bean或bean到json的轉換,是JSON解析的神器。
Gson在功能上面無可挑剔,但是性能上面比FastJson有所差距。
GSON特點:
- 快速、高效
- 代碼量少、簡潔
- 面向對象
- 數據傳遞和解析方便
GSON解析的關鍵是重點是要根據json數據里面的結構寫出一個對應的javaBean,規則是:
- JSON的大括號對應一個對象,對象里面有key和value(值)。在JavaBean里面的類屬性要和key同名。
- JSON的方括號對應一個數組,所以在JavaBeanBean里面對應的也是數組,數據里面可以有值或者對象。
- 如果數組里面只有值沒有key,就說明它只是一個純數組,如果里面有值有key,則說明是對象數組。純數組對應JavaBean里面的數組類型,對象數組要在Bean里面建立一個內部類,類屬性就是對應的對象里面的key,建立了之后要創建一個這個內部類的對象,名字對應數組名。
- 對象里面嵌套對象時候,也要建立一個內部類,和對象數組一樣,這個內部類對象的名字就是父對象的key。
注:JavaBean類里的屬性不一定要全部和JSON數據里的所有key相同,可以按需取數據,也就是你想要哪種數據,就把對應的key屬性寫出來,注意名字一定要對應
五、FastJson(阿里巴巴)
Fastjson是一個Java語言編寫的高性能的JSON處理器,由阿里巴巴公司開發。
無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
FastJson在復雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,導致Json轉換出錯,需要制定引用。
FastJson采用獨創的算法,將parse的速度提升到極致,超過所有json庫。
FastJson特點:
- 快速FAST(比其它任何基于Java的解析器和生成器更快,包括jackson)
- 強大(支持普通JDK類包括任意JavaBean Class、Collection、Map、Date或enum)
- 零依賴(沒有依賴其他任何類庫除了JDK)
- 支持注解、支持全類型序列化
六、總結
綜上5種Json技術的比較,在項目選型的時候可以使用Google的Gson和阿里巴巴的FastJson兩種并行使用,如果只是功能要求,沒有性能要求,可以使用google的Gson,如果有性能上面的要求可以使用Gson將bean轉換json確保數據的正確,使用FastJson將Json轉換Bean。
總結
以上是生活随笔為你收集整理的Android学习手册:JSON解析工具比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟服务器问题,虚拟主机常见的五大问题
- 下一篇: 实现、设置-Android TabWid