Java泛型(二)——使用Gson解析复杂的泛型嵌套泛型数据结构

本文介绍了如何使用Gson解析包含泛型的复杂数据结构,特别是嵌套泛型数组。文章详细阐述了解决Json转换过程中泛型对象变为LinkedTreeMap的问题,提出通过在CardBean中增加type字段并结合反射进行二次解析的方法。最后,作者提出了关于toJson方法的疑问,期待大神解答。
摘要由CSDN通过智能技术生成

Java泛型(一)——泛型的定义与使用
Java泛型(二)——使用Gson解析嵌套泛型数组

一、Gson

Gson是由Google自家出来的Json解析库,使用起来兼容性方面当然会有很多优势,而且解析Json数据也很方便,掌握了Gson的一些基本使用之后就可以使用它解析很多复杂的Json数据了。但当我们要解析一个复杂的数据结构时,比如说List<CardBean<E>>这种,泛型之中还有泛型的数组结构,就比较麻烦了。下面我会给出一种方案,在此之前我还是先简单的介绍一下Gson的一些东西,如果懂的大神请直接跳过,直接看第二节。

在使用Gson之前,你需要了解一下 反射 相关的知识和 泛型 相关的知识。

泛型的相关知识请参考我的第一篇:Java泛型(一)——泛型的定义与使用

Gson中的几个重要对象

JsonParser : 解析器,可以将String类型的Json数据解析成JsonElement元素。

JsonElement: Json的基本对象元素,它的拓展类有:JsonObject、JsonArray、JsonPrimitive。不同的类封装了不同的方法,以便于更好的调用。

JsonObject: Json的对象,类似于Sun里面的JSONObject,封装了对象的信息。

JsonArray: Json的数组,同样类似于Sun里面的JSONArray,封装了对象数组信息(或者子数组信息).

JsonPrimitive: Json原始对象,Sun提供的JSON中没有这个类,这里它封装了Java中基本对象。

Gson: Gson对象,用来将程序中定义的对象转换成String类型的Json格式;同时也可以将String类型的Json格式转换成我们想要的对象。

TypeToken: 用于提取泛型参数的类型,用于在解析器将Json解析成我们的实际对象时,在提供给反射机制,以便于实例化具体的类别。


Gson解析泛型

使用Gson的时候,我们一般无外乎是将Json格式的字符串解析成对象、以及将对象转化成Json格式以便于传输。

它的最基本的两个方法如下:

toJson(obj,type): 将对象转化为Json字符串

fromJson(obj,type): 将Json字符串转为type对应的对象

上面的使用方法大家都知道,我就不举例了。

但当我们使用Gson去解析泛型的时候,我目前就遇到两个问题:

问题:
解析出来的泛型对象是一个LinkedTreeMap,这个问题比较普遍,解决方法也比较简单。是因为使用fromJson的时候没有给泛型类别添加Type说明,实例下面代码附上。

/**
     * 第一种,没有在将类型的泛型Type传入,则得到的泛型对象是一个LinkedTreeMap
     */
    public static void test1() {
        CardBean<CardBean1000> cardBean = new CardBean<>();
        cardBean.cardViewType = 1000;
        CardBean1000 cardBean1000 = new CardBean1000();
        cardBean1000.agenda = "男";
        cardBean1000.name = "张三";
        cardBean.data = cardBean1000;
        String jsonStr = gson.toJson(cardBean);
        System.out.println(j
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值