概述:
Gson是谷歌開發的Java庫,幫助開發人員將Java對象(數組、數據結構)轉換爲兼容的JSON (JavaScript對象)
它有以下特點:
- JSON是一種輕量級、獨立於語言的數據交換格式,非常適合於數據傳輸、組織和存儲;
- JSON主要圍繞如何保存和記錄數據結構,然後輕鬆地轉換爲另一種特定於語言的數據結構展開;
- JavaScript開發人員將JSON作爲移動JS數組的主要方式而聞名;
- 由於每種編程語言都使用數據對象(數組、矩陣),因此使用JSON將數據從一個編程環境傳輸到另一個編程環境是一個非常方便的解決方案;
- GSON簡單地消除了Java對象的結構和JSON對象之間的差異,允許將Java數據結構保存爲JSON;
- 還支持反向操作: Java to JSON JSON to Java Java object Convert Object JSON Java。
Java中常用於JSON 與Java Object 的轉化。
二、 使用:
1 . 前期準備:
在build.gradle 中添加:
implementation ‘com.google.code.gson:gson:2.8.5’
最新版本可到github上獲取: https://github.com/google/gson
2. 示例:
Gson提供了兩個方法,直接用於json的解析和生成。
fromJson():實現反序列化
toJson(): 實現序列化
2.1.1 基本數據類型的反序列化:
Gson gson = new Gson();
int a = gson.fromJson("1", int.class);
double b = gson.fromJson("0.123", double.class);
boolean c = gson.fromJson("true", boolean.class);
String d = gson.fromJson("String", String.class);
2.1.2 基本數據類型的序列化:
Gson gson = new Gson();
String a = gson.toJson(100);
String b = gson.toJson(0.2334);
String c = gson.toJson(false);
String d = gson.toJson("abcdef");
2.1.3 Array 的反序列化:
String arayJson = "['Android', 'Ios', 'Java', 'PHP']";
Gson gson = new Gson();
String[] nameArray = gson.fromJson(arayJson, String[].class);
Log.d("arrayJson", "onCreateView: " + nameArray);
2.1.4 Array 的序列化:
ArrayList<String> nameArray = new ArrayList<>();
nameArray.add("Android");
nameArray.add("Ios");
nameArray.add("Java");
nameArray.add("PHP");
Gson gson = new Gson();
String gsonString = gson.toJson(nameArray);
2.1.5 List/Map的反序列化:
List/Map 反序列化時必須提供它的Type,通過Gson提供的TypeToken.getType()方法可以定義當前List的Type。
String listString = "[{'userId' : '1', 'userName':'怕瓦落地'}, {'userId':'2','userName':'安娜'}]";
Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<Map<String,String>>>(){}.getType();
List<Map<String, String>> list = gson.fromJson(listString, listType);
3. 實踐:
Model 類反序列化: 這個是項目中最常用到的!!!
解析上一節的網絡請求 網絡請求 中得到的json數據:
或者自行百度輸入下方URL查看:
1. 首先創建一個class文件LookModel;
2. 添加類屬性: 屬性是接口定義返回的;
3. 實現get set方法:
快捷生成所有屬性的set、get方法:
空白處點擊 : cmd + n
4. activity中引用:
type 類型 設爲 Model類型:
5. 給xml控件賦值:
在adapter中直接取get即可。
效果圖: