json簡介
1.概念:json全稱是javaScript object Notation,是一種並輕量級的數據交換格式。
2.特點:
1.本質就是具有特定格式的字符串
2.json完全獨立於編程語言
3.json比xml數據傳輸的有效性要高出很多
Android系統也原生的提供了JSON解析的API,但是它的速度很慢,而且沒有提供簡介方便的接口來提高開發者的效率和降低出錯的可能。因此,通常情況下,我們都會選擇其他優秀的JSON解析實現,用以替代系統的API,目前JSON解析的開源實現主要包括一下三種:
- Gson
- JackJson
- FastJson
JSON對象:
JSON數組:
先簡單的來介紹一下原生的JSON解析API:
他的特點是很麻煩,對於復雜的json數據解析很容易出錯
使用:
解析JSON對象的API:JsonObject
JSONObject(String json);將Json字符串解析成Json對象; getXxx(String name) ;根據name在json對象中得到相應的value值; private String ObjectanalysisTest(String string) { try { JSONObject jsonObject = new JSONObject(string); String name = jsonObject.getString("name"); int age = jsonObject.optInt("age"); String sex = jsonObject.optString("sex"); return "name:" + name + " age:" + age + " sex:" + sex; } catch (JSONException e) { e.printStackTrace(); } return null; }
解析Json數組的API:JSONArray
JSONArray(String json);將json字符串解析成json數組;
int length();得到json數組中元素的個數;
getXxx(String name) ;根據name得到json數組中對應的元素數據。
GSON
Gson是Google出品的Json解析函數庫,可以將JSON字符串反序列化為對應的Java對象,或者反過來將Java對象序列化為對應的字符串,免去了開發者手動通過JSONObject和JSONArray將Json字段逐個進行解析的煩惱,也減少了出錯的可能性,增強了代碼的質量。使用gson解析時候,對應的Java實體類無需要使用注解進行標記,支持任意復雜Java對象包括沒有源代碼的對象。
定義json對應的類的步驟
先定義成員變量名稱
再定義成員變量的類型
再定義泛型的類
從外向類逐漸推薦
GSON的特點是:解析沒那么麻煩,代碼量簡潔,可以很方便地解析復雜的Json數據,而且谷歌官方也推薦使用。
jar包的下載地址:https://mvnrepository.com/artifact/com.google.code.gson/gson
同時Android Studio用開發的話,可以通過Gradle,直接添加依賴,不用下載jar包,特別方便,如下:
1.創建GSON對象
2.創建JavaBean類
3.調用fromJson()方法
返回該json數據對象的Java對象;(JSON對象)
4.調用fromJson()方法,返回該json數據對象的Java集合;(json數組)
5.從web端下載數據:
Fastjson
fastjson是阿里巴巴公司出品的一個java語言編寫的高性能且功能完善的JSON函數庫,他采用一種“假定有序快速匹配”的算法,把JSON parse的性能提升到極致,號稱是目前java語言中最快的JSON庫。Fastjson接口簡單易用,已經被廣泛使用在緩存序列化,協議交互。Web輸出、Android客戶端等多種應用場景
Fastjson特點是:用Java語言編寫的高性能功能完善的JSON庫。它采用了一種“假定有序、快速匹配”的算法
要使用Fastjson,也是想Gson一樣,先導入jar包,或者在Gradle中添加依賴:
jar包下載地址:https://github.com/alibaba/fastjson/wiki(借鑒別人的嘿嘿嘿)
1.他同樣也要使用JavaBean類,和Gson一樣,此處就不貼代碼了
2.調用parseObject()方法,獲取轉換后的Java對象。
3.調用parseArray()方法,獲取轉換后的Java集合。
4.web端查詢和Gson代碼類似,就不做詳解
Jackson
ackson是java語言的一個流行的JSON函數庫,在android開發使用過程中,主要包含三部分。Jackson可以輕松的將Java對象轉換成json對象和xml文檔,同樣也可以將json、xml轉換成Java對象,他是基於事件驅動,與GSON相同,先創建一個對應於JSON數據的JavaBean類就可以通過簡單的操作解析出所需JSON數據。但和Gson解析不同的是,GSON可按需解析,即創建的JavaBean類不一定完全涵蓋所要解析的JSON數據,按需創建屬性,但Jackson解析對應的JavaBean必須把Json數據里面的所有key都有所對應,即必須把JSON內的數據所有解析出來,無法按需解析。但Jackson的解析速度和效率都要比GSON高
要使用Jackson,也是想Gson一樣,先導入jar包,或者在Gradle中添加依賴:
jar包的下載地址:http://wiki.fasterxml.com/JacksonDownload
1.創建ObjectMapper類
ObjectMapper:這個類提供了Java對象和Json之間的轉化,主要通過JsonParser和JsonGenerator實例來完成實際的對Json數據的讀寫操作。這個類是ObjectCodec的子類,主要的實現細節都在ObjectCodec里面。而且這個類可以重復使用,所以一般會創建這個類的一個單例模式
2.他同樣也要使用JavaBean類,和Gson一樣,此處就不貼代碼了
3.調用readvalue()方法,獲取轉換后的Java對象
User user = null;
4.JSON數組
ObjectMapper mapper = new ObjectMapper(); ArrayList<User> users = null; try { JavaType javaType = mapper.getTypeFactory().constructParametricType(ArrayList.class,User.class); users = mapper.readValue(string,javaType); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < users.size(); i++) { User user = users.get(i); buffer.append(user.Usershow() + "\n"); } return buffer.toString(); } catch (IOException e) { e.printStackTrace(); } return null;