JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,採用完全獨立於語言的文本格式,爲Web應用開發提供了一種理想的數據交換格式。
其實,要創建和解析JSON數據,也可以使用GSON來完成。GSON是Google提供的用來在Java對象和JSON數據之間進行映射的Java類庫。使用GSON,可以很容易的將一串JSON數據轉換爲一個Java對象,或是將一個Java對象轉換爲相應的JSON數據。
1.GSON的兩個重要方法
在GSON的API中,提供了兩個重要的方法:toJson()和fromJson()方法。其中,toJson()方法用來實現將Java對象轉換爲相應的JSON數據,fromJson()方法則用來實現將JSON數據轉換爲相應的Java對象。
1.1 toJson()方法
toJson()方法用於將Java對象轉換爲相應的JSON數據,主要有以下幾種形式:
(1)String toJson(JsonElement jsonElement);
(2)String toJson(Object src);
(3)String toJson(Object src, Type typeOfSrc);
其中,方法(1)用於將JsonElement對象(可以是JsonObject、JsonArray等)轉換成JSON數據;方法(2)用於將指定的Object對象序列化成相應的JSON數據;方法(3)用於將指定的Object對象(可以包括泛型類型)序列化成相應的JSON數據。
1.2 fromJson()方法
fromJson()方法用於將JSON數據轉換爲相應的Java對象,主要有以下幾種形式:
(1)<T> T fromJson(JsonElement json, Class<T> classOfT);
(2)<T> T fromJson(JsonElement json, Type typeOfT);
(3)<T> T fromJson(JsonReader reader, Type typeOfT);
(4)<T> T fromJson(Reader reader, Class<T> classOfT);
(5)<T> T fromJson(Reader reader, Type typeOfT);
(6)<T> T fromJson(String json, Class<T> classOfT);
(7)<T> T fromJson(String json, Type typeOfT);
以上的方法用於將不同形式的JSON數據解析成Java對象。
2.在服務器端生成JSON數據
public class JsonTools {
/*
* Function : 生成JSON字符串
* Param : value 想要轉換成JSON字符串的Object對象
* Retuen : JSON字符串
* Author : 博客園-依舊淡然
*/
public static String createJsonString(Object value) {
Gson gson = new Gson();
String string = gson.toJson(value);
return string;
}
}
圖1 生成的JSON數據
3.在客戶端解析JSON數據
在Android工程中,我們可以通過HttpURLConnection接口訪問圖1所示的URL來獲得服務器上的JSON數據。
得到JSON數據之後,便可以通過使用前面提到的fromJson()方法,將圖1 所示的JSON數據還原成對應的Person對象列表了。當然了,因爲這裏使用到了GSON,同樣需要向Android工程中導入gson-2.2.1.jar包。具體的實現方法如下。
/* * Function : 解析JSON數據,還原成Person對象列表 * Param : jsonString 從服務器獲得的Json數據 * Retuen : Person對象列表 */ public static List<Person> getListPerson(String jsonString) { List<Person> list = new ArrayList<Person>(); Gson gson = new Gson(); list = gson.fromJson(jsonString, new TypeToken<List<Person>>() {}.getType()); return list; }
可以看到,使用GSON解析JSON數據的代碼實現也非常簡單。其中,TypeToken是GSON提供的數據類型轉換器,支持多種數據集合類型轉換,其反射機制可以實現將解析出來的Java對象映射到對應的數據集合中。
在本實例中,同樣點擊Button按鈕向服務器發送獲取JSON數據的請求,從服務器獲得JSON數據後,使用以上的代碼完成對JSON數據的解析,最後將解析得到的Person對象依次顯示在TextView控件中。程序運行的結果如圖2所示。