Gson的使用?Json如何转成集合?
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,再转成新的对象。
这样子,新的对象改值,返回给客户端即可。多处用到这个复制对象,可以写成工具类。