JSON解析之利用Gson解析含泛型对象

JSON解析之利用Gson解析含泛型对象

背景

在日常使用http请求时经常会有对返回数据的解析。返回数据一般包含int code的状态码+String message的状态消息+T data的数据内容。在做JSON串解析时需要支持对泛型的解析。

实现

添加依赖

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

示例代码

	private class Base<T> {
        private int code;
        private String message;
        private T data;

        public Base(int code, String message, T data) {
            this.code = code;
            this.message = message;
            this.data = data;
        }

        @Override
        public String toString() {
            return "base{" +
                    "code=" + code +
                    ", message='" + message + '\'' +
                    ", data=" + data +
                    '}';
        }
    }

    private class Person {
        private int age;
        private String name;

        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    }

    @Test
    public void testGson() {
        Gson gson = new Gson();

        Person person = new Person(20, "Wang");
        System.out.println("----- person -----");
        System.out.println(person);

        String personJson = gson.toJson(person);
        System.out.println("----- person json -----");
        System.out.println(personJson);

        Person personResult = gson.fromJson(personJson, Person.class);
        System.out.println("----- person fromJson result -----");
        System.out.println(personResult);

        Base<Person> base = new Base<>(100, "Person", person);
        System.out.println("----- base -----");
        System.out.println(base);

        String baseJson = gson.toJson(base);
        System.out.println("----- base json -----");
        System.out.println(baseJson);

        Base<Person> baseResult = gson.fromJson(baseJson, new TypeToken<Base<Person>>() {
        }.getType());
        System.out.println("----- base fromJson result -----");
        System.out.println(baseResult);
    }

输出结果

----- person -----
Person{age=20, name='Wang'}
----- person json -----
{"age":20,"name":"Wang"}
----- person fromJson result -----
Person{age=20, name='Wang'}
----- base -----
base{code=100, message='Person', data=Person{age=20, name='Wang'}}
----- base json -----
{"code":100,"message":"Person","data":{"age":20,"name":"Wang"}}
----- base fromJson result -----
base{code=100, message='Person', data=Person{age=20, name='Wang'}}

总结

通过使用Gson库中的TypeToken可以解析带泛型的对象。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值