Gson的基本用法:
1、toJson 将object转化为json字符串
将此实体类转化为json字符串
class Persion{
public Persion(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
}
demo:
Gson gson = new Gson();
String json = gson.toJson(new Persion("lucy",10));
结果:
{“age”:10,”name”:”lucy”}
Gson gson = new Gson();
List<Persion> list = new ArrayList<>();
for(int i=0;i<5;i++){
list.add(new Persion("lucy"+i,i));
}
String json = gson.toJson(list);
结果:
[{“age”:0,”name”:”lucy0”},{“age”:1,”name”:”lucy1”},{“age”:2,”name”:”lucy2”},{“age”:3,”name”:”lucy3”},{“age”:4,”name”:”lucy4”}]
Map<String,Object> map = new HashMap<>();
map.put("name","lucy");
map.put("age",10);
String json = gson.toJson(list);
结果:
{“age”:10,”name”:”lucy”}
这里列举了3中情况的转化(bean、List、Map),将json序列化为JavaBean其实就是上面反过来。
String json = "{\"age\":10,\"name\":\"lucy\"}";
Persion persion = gson.fromJson(json,Persion.class);
结果:
返回一个Person对象并赋值
扫描二维码关注公众号,回复: 4258634 查看本文章
String json = "{\"Age\":10,\"name\":\"lucy\"}";
Persion persion = gson.fromJson(json,Persion.class);
注意和上面的区别,我们将age变为Age
结果:
仍然返回一个person对象,不过age的值为0,name为lucy,
说明gson是区分大小写的
由于后台和我们前台的命名规范可能不同,而且你让后台去改json串,人家也不一定改,我们定义bean的时候也不能按照json来定义,我们也要遵守我们的命名规范,这个时候注解就登场了。
1、重命名注解:SerializedName
这个注解就是解决json的key和bean中名称不一致。
class Persion{
public Persion(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
@SerializedName("Age")
private int age;
}
我们在age属性上面加上@SerializedName(“Age”),这个时候在运行上面的代码就能正常返回了。
我们再来看看SerializedName的另一种用法:
@SerializedName(value = “name”,alternate = {“name1”,”name2”})
private String name;
这种用法是把json串key为name,name1,name2的值都赋值给name,注意后面的值会把前面的覆盖掉,这个是根据json串的顺序来的
、根据json串的顺序来的
、根据json串的顺序来的
,重要的事情说3遍。比如:
String json = "{\"Age\":10,\"name1\":\"lucy1\",\"name2\":\"lucy2\",\"name\":\"lucy\"}";
name的值为:lucy
比如:
String json = "{\"Age\":10,\"name1\":\"lucy1\",\"name\":\"lucy\",\"name2\":\"lucy2\"}";
name的值为:lucy2
到这里gson已经能够解决95%的问题了,当然gson还提供了一些高级方法:
@Expose :指定(反)序列化哪些字段。
@Since(float v)、@Util(float v): 版本控制,不同的版本,我们api接口可能会发生变化,可以用这个字段来指定哪些可以(反)序列化
基本的就了解到这吧,其实还有一些高级用法比如TypeAdapter ,比如age想要一个int值,json返回的是String值,如何做容错处理?以后用到在研究吧。