Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。可以將一個 JSON 字符串轉成一個 Java 對象,或者反過來。
數組的序列化和反序列化
數組的序列化和反序列化比較簡單,與普通對象類似,唯一需要注意的就是填寫正確的數組類型:
str = gson.toJson(arr); arr = gson.fromJson(str, int[].class); arr = gson.fromJson(str, String[].class); arr = gson.fromJson(str, User[].class);
實例一
把字符串數組轉換成JAVA數組
public static void fun1() { String jsonstr = "['a','b','c','d']"; Gson gson = new Gson(); String[] sArr = gson.fromJson(jsonstr,String[].class); for(String s : sArr) { System.out.println(s); } }
實例二
創建一個 userInfo 對象,並保持為文件 userInfo.java
public class userInfo { private String name; private int age; private String sex; public String getName() { return this.name; } public int getAge() { return this.age; } public String getSex() { return this.sex; } }
將 userInfo 的JSON字符串轉換成為java對象
public static void fun2() { String jsonstr = "{'name':'張三','age':60,'sex':'男'}"; Gson gson = new Gson(); userInfo user = gson.fromJson(jsonstr, userInfo.class); System.out.println(user.getName()); }
將 userInfo 字符串數組轉換成java數組
public static void fun3() { String jsonstr = "[{'name':'張三','sex':'男', 'age':17},{'name':'李四','sex':'男', 'age':25},{'name':'李梅','sex':'女', 'age':42}]"; Gson gson = new Gson(); userInfo[] userList = gson.fromJson(jsonstr, userInfo[].class); for(userInfo u : userList) { System.out.println("姓名:"+ u.getName()+" 年齡:"+u.getAge()); } }
泛型 和 RESETfull API
這在 resetful api 返回數據時反映得更為清楚,通常 resetful api 接口返回的 Json 數據為:
{"status":0,"msg":'...',"data":{...}},
{"status":0,"msg":'...',"data":[...]},
status 表示響應狀態碼,msg 表示狀態碼配套的信息,而 data 才是最核心的部分:響應的數據。一般而言,它要么表示返回一個對象,要么表示返回一個對象的集合。
Gson 為我們提供了 TypeToken 來實現對泛型的支持,所以當我們希望使用將以上的數據解析為 List<String> 時需要將 List<String> “套在” new TypeToken<T>(){}.getType() 中。
在這里會把這個結果對象定義成泛型類,保存為文件 Result.java
public class Result<T> { private int status; private T data; public int getStatus() { return this.status; } public T getData() { return this.data; } }
實例三
用泛型將 userInfo 字符串數組轉換成java數組,這個也可以用 userInfo[] userlist = gson.fromJson(jsonstr, userInfo[].class) 這個轉換。
public static void fun4() { String jsonstr = "[{'name':'張三','sex':'男', 'age':17},{'name':'李四','sex':'男', 'age':25},{'name':'李梅','sex':'女', 'age':42}]"; Gson gson = new Gson(); List<userInfo> userList = gson.fromJson(jsonstr, new TypeToken<List<userInfo>>() {}.getType()); for(userInfo u : userList) { System.out.println("姓名:"+ u.getName()+" 年齡:"+u.getAge()); } }
實例四
這個JSON字符串格式 非常重要
public static void fun5() { String jsonstr = "{'status':1,'data':[{'name':'張三','age':10},{'name':'李四','age':15},{'name':'王五','age':15}]}"; Gson gson = new Gson(); Result<List<userInfo>> userListResult = gson.fromJson(jsonstr, new TypeToken<Result<List<userInfo>>>() {}.getType()); System.out.println(userListResult.getStatus()); //輸出 1 List<userInfo> userlist = userListResult.getData(); for(userInfo u : userlist) { System.out.println("姓名:"+u.getName()+" 年齡:"+u.getAge()); } }
