Gson 的基本用法(一)


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());
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM