gson 的基本用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mengks1987/article/details/80089645

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对象并赋值

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值,如何做容错处理?以后用到在研究吧。

猜你喜欢

转载自blog.csdn.net/mengks1987/article/details/80089645
今日推荐