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());
        }
    }
复制代码

 

posted @   星锋  阅读(1235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示