阳光沙滩
让学习编程变得简单
Gson的使用?Json如何转成集合?
发表于 2020-05-05    阅读次数 246

Gson的使用?Json如何转成集合?

这么简单,谁不会用呀!

对吧!

我相信大多数同学都是会用的,但是,适用大概也就是限于。

  • 字符串转对象
  • 对象转字符串

那么?你有没有遇到这样的问题呢?

集合转字符串很简单,那么字符串转集合呢?

添加依赖

Gradle

 implementation 'com.google.code.gson:gson:2.8.6'

Maven

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

基本使用

  • 字符串转对象

适用场景:在android开发中,现在基本上数据以json的格式进行交互。我们从服务器请求回来的数据,一般是json格式的。我们要更方便地使用这些数据,先把它转成对象。

比如说我们要把这个json字符串转成对象

{
    "age":28,
    "gender":"male",
    "name":"President",
    "position":"CEO"
}

对象的实体类是persion

private class Employee {
    private int age;
    private String name;
    private String gender;
    private String position;

  ...getter and setter...
}

从json转成object

有这么多

图片描述

这样转就可以了

 Employee employeeObject = gson.fromJson(employeeJson,Employee.class);

这是最基本的使用

  • 对象转字符串

你向服务器提交数据的时候,是不是要把对象转成json呢?你直接给一个对象,那不就是内存地址吗?后台肯定拿不到呀。

对象转字符串也很简单。

图片描述

比如说我们把上面的Employee转成json

    String employeeJson = gson.toJson(employee);

这就搞定了,得到json字符串

输出看看

{"age":28,"gender":"male","name":"President","position":"CEO"}

Json如何转集合?

集合涉及到泛型,这个怎么转呢?

集合转json很简单,因为toJson可以传Object,也就是万物皆可json

我们先把一个集合内容转成json吧。

     Gson gson = new Gson();
        List<Employee> employees = new ArrayList<>();
        Employee zhangsan = new Employee();
        zhangsan.setAge(28);
        zhangsan.setGender("male");
        zhangsan.setPosition("dev");
        zhangsan.setName("zhangsan");
        employees.add(zhangsan);
        //
        Employee lisi = new Employee();
        lisi.setAge(30);
        lisi.setGender("male");
        lisi.setPosition("manager");
        lisi.setName("lisi");
        employees.add(lisi);
        //
        Employee wangwu = new Employee();
        wangwu.setAge(30);
        wangwu.setGender("male");
        wangwu.setPosition("seller");
        wangwu.setName("wangwu");
        employees.add(wangwu);
        String employeesJson = gson.toJson(employees);
        Log.d(TAG,"employeesJson: " + employeesJson);

结果:

[
    {
        "age":28,
        "gender":"male",
        "name":"zhangsan",
        "position":"dev"
    },
    {
        "age":30,
        "gender":"male",
        "name":"lisi",
        "position":"manager"
    },
    {
        "age":30,
        "gender":"male",
        "name":"wangwu",
        "position":"seller"
    }
]

这还是挺简单的

那么json怎么转集合呢?

也就是要把上面这个字符串json,转成List

第一种方法:json-->数组-->集合

        Employee[] employeesArray = gson.fromJson(employeesJson,Employee[].class);
        List<Employee> employeesList = Arrays.asList(employeesArray);

第二种方法:json --> 集合

  List<Employee> employeesList = gson.fromJson(employeesJson,new TypeToken<List<Employee>>() {
        }.getType());

gson还可以用于复制对象

我们有些时间需要复制对象,比如说我们使用JPA查询出来的数据,比如说查询出了用户列表,但是我们不希望密码这些敏感信息给到客户端。所以我们需要把密码干掉。

当然,可以查询部分内容。

如果你查询了所有内容,你怎么处理呢?直接把对象的密码set为空吗?

这可不行,此时事务还没有结束,如果你设置为空,那事务一提交,你数据库的密码就为空了。

这个时候 我们需要复制对象,把复制的对象返回给客户端即可。

复制对象可以使用clone,也可以使用新创建的方式,通过属性工具类把对象的传给到新创建的对象。

也可以使用gson,先转成Json,再转成新的对象。

这样子,新的对象改值,返回给客户端即可。多处用到这个复制对象,可以写成工具类。