#GSON
Json 全稱 JavaScript Object Natation ,用來描述數據結構,它是基於純文本的數據格式,
是一種輕量級的數據交換格式。廣泛應用於 服務端 與 客戶端 的數據交互。
-
格式
Json 以 key-value的形式存儲數據;
Key的取值 爲
String
類型;Value的取值 爲
String
,boolean
,Number
,數組
,Object
,null
;Json 串 以
{
開始, 以}
結尾;Json 串中
數組
是 以[
開始, 以]
結尾;Json 串中
Object
是 以{
開始, 以}
結尾; -
案例
基本類型 :
{ "name": "張三", "age": 18, "sex": true }
數組類型 :
[ { "name": "張三", "age": 18, "sex": true }, { "name": "李四", "age": 19, "sex": false } ]
對象嵌套 :
{ "name": "teacher", "computer": { "CPU": "intel7", "disk": "512G" }, "students": [ { "name": "張三", "age": 18, "sex": true }, { "name": "李四", "age": 19, "sex": false } ] }
-
樹狀結構
json 字符串相當於一個倒掛的樹, key 相當於 樹的節點.
- 網址 http://mvnrepository.com/artifact/com.google.code.gson/gson
- 選擇版本,進入下載jar.
Gson 格式化 和 解析
Gson 格式化
將 java 對象 格式化爲 Json 字符串.
-
實現步驟 :
-
獲得需要的對象:
Student stu = new Student(); stu.setName("張三"); stu.setAge(18); stu.setSex(true);
-
格式化
Gson gson = new Gson(); //將 對象 轉化成 json 字符串 String json = gson.toJson(stu)
-
Gson 解析
將 Json 字符串 解析 成 java 對象.
-
Gson 的 節點對象:
JsonElement
: 所有的節點 都是 JsonElement 對象.JsonPrimitive
: 基本的 數據類型的 節點 對象, JsonElement 的子類.JsonNull
: 代表 空節點 對象,即 有 key,value 爲空,JsonElement 的子類.JsonObject
: 對象 數據類型的 節點 對象, JsonElement 的 子類.JsonArray
: 數組 數據類型的 節點 對象, JsonElement 的 子類. -
JsonElement的取值:
-
JsonPrimitive
: value 的 取值對應 java
-
int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigInteger,Number
```
2. JsonObject
: value 的 取值對應 java 的 Object 對象.
3. `JsonArray` : value 的 取值對應 java 的 List 及其子類對象.
-
Json的解析成 java 對象
json:
{'name':'張三','age':18,'sex':true}
代碼:
Gson gson = new Gson(); // 將json 轉化成 java 對象 Student stu = gson.fromJson(json, Student.class);
-
Json 解析 成 List
json:
[{'name':'小1','age':18,'sex':true},{'name':'小2','age':19,'sex':false},{'name':'小3','age':20,'sex':true},{'name':'小4','age':21,'sex':false},{'name':'小5','age':22,'sex':true}]
代碼:
Gson gson = new Gson(); // 將 json 轉化 成 List泛型 List<Student> stus = gson.fromJson(json, new TypeToken<List<Student>>() {}.getType());
-
Json 解析 成 map
json:
{'小3':{'name':'小3','age':20,'sex':true},'小4':{'name':'小4','age':21,'sex':false},'小5':{'name':'小5','age':22,'sex':true},'小1':{'name':'小1','age':18,'sex':true},'小2':{'name':'小2','age':19,'sex':false}}
代碼:
Gson gson = new Gson(); // 將 json 轉化 成 Map泛型 Map<String,Student> map = gson.fromJson(json, new TypeToken<Map<String,Student>>() {}.getType());
-
Json 節點 的解析
json:
{'flag':true,'data':{'name':'張三','age':18,'sex':true}}
步驟 :
-
獲得 解析者
JsonParser parser = new JsonParser();
-
獲得 根節點元素
JsonElement element = parser.parse(json);
-
根據 文檔判斷根節點屬於 什麼類型的 Gson節點對象
// 假如文檔 顯示 根節點 爲對象類型 // 獲得 根節點 的實際 節點類型 JsonObject root = element.getAsJsonObject();
-
取得 節點 下 的某個節點的 value
// 獲得 flag 節點的值, flag 節點爲基本數據節點 JsonPrimitive flagJson = root.getAsJsonPrimitive("flag"); // 基本節點取值 boolean flag = flagJson.getAsBoolean(); // 獲得 data 節點的值,data 節點爲Object數據節點 JsonObject dataJson = root.getAsJsonObject("data"); // 將節點上的數據轉換爲對象 Student stu = new Gson().fromJson(dataJson,Student.class);
-