一起Talk Android吧(第三百五十三回:Gson库解析JSON数组一)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百五十三回:Gson库解析JSON数组一)相关的知识,希望对你有一定的参考价值。

各位看官们,大家好,上一回中咱们说的是android中Gson库解析JSON对象的例子,这一回中咱们介绍的例子是Gson库解析JSON数组。闲话休提,言归正转。让我们一起Talk Android吧!

使用步骤

看官们,在本章回中我们将介绍如何使用Gson库解析JSON数组,其中数组的成员全是JSON对象。下面是具体的操作步骤:

  • 1.获取JSON字符串,字符串内容为JSON数组;
  • 2.创建GSON对象,在对象的构造方法中传入JSON数组中包含的JSON对象对应的JavaBean类型; 构造方法中参数的类型由Gson库定义,我们可以通过TypeToken对象的getType()方法来获取;
  • 3.使用GSON对象的fromJson()方法获取JSON数组类型的对象;

这里所说的JSON数组类型就是List的泛型,它和创建TypeToken对象时传入的类型一致,例如:

List<JsonBeanType> beanList = 
gsonObj.fromJson(jsonArrayString,new TypeToken<List<JsonBeanType>>().getType());

在此示例中的JSON数组类型就是List<JsonBeanType>.

就这样简单三步就完成了JSON对象的解析,与解析JSON对象相比,理解JSON数组类型相对难一些,因此我们通过具体的代码来演示:

示例程序

private void parseJsonByGson() 
    String jsonArrayString = 
    "[\\"id\\":11,\\"name\\":\\"jam\\",\\"price\\":3.5,\\"path\\":\\"a/b/c\\",\\"id\\":33,\\"name\\":\\"Nik\\",\\"price\\":7.6,\\"path\\":\\"e/a/k\\"]";

    Gson gsonObj = new Gson();
    List<JsonBeanType> beanList = gsonObj.fromJson(jsonArrayString,new TypeToken<List<JsonBeanType>>().getType());

    Log.d(TAG, "parseJsonByGson: "+beanList.toString());

在上面的代码中,理解难点就是传递给fromJson方法的第二个参数。该参数的类型是Type,通过TypeToken类的getType()方法返回,这个容易理解,接下来分析创建TypeToken对象,创建此对象时使用了构造方法,而构造方法中的类型为泛型,因为JSON数组与Java中的List对象相对应,所以传入的具体类型是List的泛型(这里嵌套了两个泛型),List泛型的具体类型为JavaBean类型。为了方便大家理解,JavaBean类和上一章回的JavaBean类完全相同。

在实际中JavaBean类需要与JSON数组中的JSON对象类型保持一致。这个可以使用GsonFormat工具来生成,我们在前面章回中介绍过此工具,这里就不详细介绍了。

最后我们再介绍一下fromJson()方法的返回值,这个返回值就是JSON数据转换后的Java对象,因为JSON数组中包含了多个JSON对象,所以转换后的对象为List类型的对象,List对象中包含多个Java对象,这些Java对象的类型为JavaBean类型。代码中的JSON字符串和JavaBean类型与上一章回中的一样,不同之处在于上一章中只有一个JSON对象,这里使用了两个JSON对象,并且使用这两个JSON对象组成了JSON数组。

关于程序的运行结果这里不再列出,希望大家自已动手编译并且运行程序,这样可以加深对知识理解。特别是泛型的嵌套和TypeToken类返回的type类型。

看官们,关于Android中Gson库解析JSON数组的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百五十三回:Gson库解析JSON数组一)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第三百五十回:解析JSON数组五)

一起Talk Android吧(第三百五十一回:解析JSON数据总结)

一起talk C栗子吧(第一百五十三回:C语言实例--socket通信地址系统调用一)

一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)

一起Talk Android吧(第三百五十七回:Gson库解析JSON数据总结)

一起Talk Android吧(第三百四十三回: Android网络编程总结)