GSON
Json 介紹
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 相當於 樹的節點.
Gson 下載
- 網址 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 | Gson對象 | 類型--------------------|----------- ----|-----------------------------------{},[] |JsonElement |一切json節點皆爲JsonElement(json節點){key:123} |JsonPrimitive |value爲int,gson中的基本類型{key:12.3} |JsonPrimitive |value爲float,gson中的基本類型{key:true} |JsonPrimitive |value爲boolean,gson中的基本類型{key:"123"} |JsonPrimitive |value爲String,gson中的基本類型{key:NULL} |JsonNull |value爲空,gson中的Null類型{key:{key:value}} |JsonObject |value爲json節點,gson中的對象類型{key:[{key,value},{key,value}]} |JsonObject |value爲json節點,gson中的對象類型[] |JsonArray |整個節點以[]開始,gson中的數組類型
將 Json 字符串 解析 成 java 對象.
-
Gson 的 節點對象:
JsonElement
: 所有的節點 都是 JsonElement 對象.JsonPrimitive
: 基本的 數據類型的 節點 對象, JsonElement 的子類.JsonNull
: 代表 空節點 對象,即 有 key,value 爲空,JsonElement 的子類.JsonObject
: 對象 數據類型的 節點 對象, JsonElement 的 子類.JsonArray
: 數組 數據類型的 節點 對象, JsonElement 的 子類. -
JsonElement的取值:
-
JsonPrimitive
: value 的 取值對應 javaint,double,float,long,short,boolean,char,byte,String,BigDecimal,BigInteger,Number
-
JsonObject
: value 的 取值對應 java 的 Object 對象. -
JsonArray
: value 的 取值對應 java 的 List 及其子類對象.
-
-
Json的解析成 java 對象
Gson gson = new Gson(); // 將json 轉化成 java 對象 Student stu = gson.fromJson(json, Student.class);
-
Json 解析 成 List
Gson gson = new Gson(); // 將 json 轉化 成 List泛型 List<Student> stus = gson.fromJson(json, new TypeToken<List<Student>>() {}.getType());
-
Json 解析 成 mapsss
Gson gson = new Gson();// 將 json 轉化 成 Map泛型Map<String,String> map = gson.fromJson(json, new TypeToken<Map<String,String>>() {}.getType());
-
Json 節點 的解析
步驟 :
-
獲得 解析者
JsonParser parser = new JsonParser();
-
獲得 根節點元素
JsonElement root = parser.parse(json);
-
根據 文檔判斷根節點屬於 什麼類型的 Gson節點對象
//假如文檔 顯示 根節點 爲對象類型 // 獲得 根節點 的實際 節點類型 JsonObject element = root.getAsJsonObject();
-
取得 節點 下 的某個節點的 value
// 獲得 name 節點的值,name 節點爲基本數據節點 JsonPrimitive nameJson = element.getAsJsonPrimitive("name"); String name = nameJson.getAsString(); // 獲得 students 節點的值, students 節點爲 數組數據節點 JsonArray arrayJson = element.getAsJsonArray("students"); // 獲得數據 的長度 int size = arrayJson.size(); for(int i = 0; i < size; i++) { //獲得每一個json 元素 JsonElement e = arrayJson.get(i); // 通過元素 得到需要的節點值 TODO: }
-