Gson 為 Google 所有,可將 JSON 內容和 java object 互相轉換的開源函式庫。
最大的用途就是可直接將 Server 回傳的 json string 直接轉換成 java object,而不用再一一寫對應的 JsonObject。
而 GsonFormat 為 android studio 的外掛,用途是取得 json 內容之後,可以產生對應的 java object。
兩者搭配起來就可以方便的處理 Server 回傳訊息。
首先是 Gson 的部分:
這裡為Gson github連結,相關的安裝和使用都有介紹。
1.Gson Dependency
在 module 的 build.gradle 加入
dependencies { ... implementation 'com.google.code.gson:gson:2.8.5' }
2.Using in code
2-1. Basic class
首先假設有個 User 類別為對應的 java object
public class User { private String name; private int age; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
2-2. java object to json string
(就是將已存在的java物件轉成json 格式的string)
@Test public void test_UserToJSON() { User foxx = new User(); foxx.setAge(99); foxx.setName("Foxx"); foxx.setSex("male"); Gson gson = new Gson(); String result = gson.toJson(foxx, User.class); System.out.println("userToJSON:" + result); assertEquals("{\"name\":\"Foxx\",\"age\":99,\"sex\":\"male\"}", result); }
第9行即透過 gsong.toJson 將 java object 轉成 json string
2-3. json string to java object
@Test public void test_JSONToUser() { Gson gson = new Gson(); String source = "{\"name\":\"Foxx\",\"age\":99,\"sex\":\"male\"}"; User target = gson.fromJson(source, User.class); assertNotNull(target); }
第5行透過 gson.fromJson 將 json string 轉成 java object
2-4. json string to list java object
Gson gson = new Gson(); List<RecordInfo> recordInfos = gson.fromJson(httpResult, new TypeToken<List<RecordInfo>>() {}.getType());
透過 TypeToken 把 Json 格式的 String 轉換為 List。
httpResult 即為 Json 格式的 String 內容如下
[ { "type": "POWER" "location": "L1", "no": "1" }, { "type": "POWER", "location": "L2", "no": "2" }, { "type": "POWER", "location": "L3", "serno": "3" } ]
RecordInfo為對應的資料格式如下
public class RecordInfo { private String type; private String location; private String no; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } }
接著是GsonFormat
1.Install GsonFormat
安裝方式和一般的 android studio 外掛相同。
開啟 android studio -> File -> Settings -> Plugins -> Browse repositories
->輸入 gsonformat -> install -> 安裝完成後 重開 android studio
2.How to use
2-1.首先手動建立對應的空 class (只有類別名稱無其他內容),以上面的 User 為例,我們就先建立一個User的空class。
public class User { }
2-2.產生對應 json 的內容
假設已取得 Server 回傳的 json string 如下
{ "name":"Foxx", "sex":"male", "age":"99" }
回到 2-1 建立的 User class,點擊上方工具欄的 Code,再點擊 Generate,選擇GsonFormat,在顯示的視窗中貼上 2-2 的內容。
點擊 OK -> 再點擊 OK,完成後 User class 如下
public class User { private String name; private String sex; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
從第3~29行即是 GsonFormat 產生的內容。