一起talkandroid吧(第三百五十三回:gson库解析json数组一)(代码片段)

talk_8 talk_8     2022-10-21     116

关键词:

各位看官们,大家好,上一回中咱们说的是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数组的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

一起talkandroid吧(第三百五十回:解析json数组五)(代码片段)

...子是解析JSON数组。闲话休提,言归正转。让我们一起TalkAndroid吧!看官们,本章回中我们将介绍特殊的JSON数组,此数组和上一章回中解析的混合数组类似,特殊之处在于key的string没有英文& 查看详情

一起talkandroid吧(第三百八十三回:视图绑定-viewbinding)(代码片段)

文章目录概念介绍使用步骤1.在配置文件中(模块级的build.gradle)激活视图绑定;2.创建Activity并且创建xml格式的布局文件,并且在布局文件中添加UI组件;3.在Activity的代码文件中使用inflate()方法获取ViewBinding类的对象;4.通过ViewBindin... 查看详情

一起talkandroid吧(第三百一十三回:imageview常用属性二)(代码片段)

...们继续说该例子。闲话休提,言归正转。让我们一起TalkAndroid吧!官们,我们在上一章回中介绍了ImageView的src属性,本章回中将介绍在此属性的基础上如何给控件添加滤镜。添加滤镜相当于是给资源图片加一了层 查看详情

一起talkandroid吧(第三百七十三回:多线程版timer)(代码片段)

...是多线程版Timer。闲话休提,言归正转。让我们一起TalkAndroid吧!看官们,我们在上一章回中提到了使用Timer时的陷阱,而且介绍了避开陷阱的方法:创建两个Tim 查看详情

一起talkandroid吧(第三百五十二回:gson库解析json对象)(代码片段)

...son库解析JSON对象。闲话休提,言归正转。让我们一起TalkAndroid吧!看官们,我们在前面章回中介绍了使用Java原生知识(JsonObject类)来解析JSON数据,在最后的总结中有看官说比较繁琐 查看详情

一起talkandroid吧(第三百九十三回:从drawable中获取bitmap)(代码片段)

...获取Bitmap"。闲话休提,言归正转,让我们一起TalkAndroid吧!使用背景我们在程序中经常使用图片资源,常用的做法是在布局文件中 查看详情

一起talkandroid吧(第四百五十三回:给view添加滑动事件二)(代码片段)

...续说该例子。闲话休提,言归正转,让我们一起TalkAndroid吧!整体思路还使用上一章回中自定义的View,添加滑动事件的方式也不变。添加滑动事件后View会跟着滑动事件一起变化,通俗点讲是手指在屏幕上滑动到哪... 查看详情

一起talkandroid吧(第三百五十八回:gson库解析java对象)(代码片段)

...son库解析Java对象。闲话休提,言归正转。让我们一起TalkAndroid吧!操作步骤看官们,我们在本章回中将介绍如何使用Gson库解析Java对象,这里所说的解析就是把Java对象转换成JSON字符串。下面是具体的操作步骤࿱... 查看详情

一起talkandroid吧(第三百五十六回:gson库解析json数组四)(代码片段)

...继续介绍该例子。闲话休提,言归正转。让我们一起TalkAndroid吧!看官们,我们在本章回中继续介绍如何使用Gson库解析JSON数组,不过JSON数组比较特殊,特殊之处体现为:JSON对象中的key没有英文,只有... 查看详情

一起talkandroid吧(第三百零三回:edittext限制输入)(代码片段)

...EditText限制输入。闲话休提,言归正转。让我们一起TalkAndroid吧!看官们,我们在前面的章回是介绍过EditText的基本用法,如果有看官忘记的话可以查看本系列博客第六十回的内容。 查看详情

一起talkandroid吧(第三百五十九回:gson库解析vsjaava原生解析)(代码片段)

...析VSJAava原生解析。闲话休提,言归正转。让我们一起TalkAndroid吧!对比分析看官们,我们在前面章回中介绍了两种解析JSON数据的方法,分别是Java原生解析和Gson库解析。本章回中主要对比一下这两种解析方式的优... 查看详情

一起talkandroid吧(第三百零九回:风格vs主题)

一起TalkAndroid吧(第三百零九回:风格VS主题)一起TalkAndroid吧(第三百零九回:风格VS主题)一起TalkAndroid吧(第三百零九回:风格VS主题)一起TalkAndroid吧(第三百零九回:风格VS主题)一起TalkAndroid吧(第三百零九回:风格VS主... 查看详情

一起talkandroid吧(第四百五十回:绘制彩虹)(代码片段)

...的例子是"绘制彩虹"。闲话休提,言归正转,让我们一起TalkAndroid吧!整体思路彩虹相信大家都见过,主要呈现为圆弧形状,而且颜色各不相同。我们可以画出圆弧,并且给圆弧配上不同的颜色,这样就能实现彩虹效果。画圆弧... 查看详情

一起talkandroid吧(第三百零二回:textview显示长文字)

...是TextView显示长文字。闲话休提,言归正转。让我们一起TalkAndroid吧!看官们,我们在本系列内容的第五十九回章回中介绍过TextView,不过只介绍了它的基本用法,时间比较长,大家如果忘记的话可以点击这里查看。本章回中我们... 查看详情

一起talkandroid吧(第四百六十三回:自定义属性)(代码片段)

...定义属性"。闲话休提,言归正转,让我们一起TalkAndroid吧!使用背景我们在前面章回中介绍了从Drawable中获取Bitmap的方法,其中 查看详情

一起talkandroid吧(第四百五十八回:seekbar补充用法一)(代码片段)

...补充用法"。闲话休提,言归正转,让我们一起TalkAndroid吧!我们在之前的博客中介绍过SeekBar的用法,如果有看官忘记了可以点击这里查看 查看详情

一起talkandroid吧(第四百五十九回:seekbar补充用法二)(代码片段)

...中咱们继续说该例子。闲话休提,言归正转,让我们一起TalkAndroid吧!我们在上一章回中介绍了SeekBar补充用法中的两种用法:修改进度的背景和修改进度条的头部。本章回将另外一种用法:修改进度的步进值。修改进度的步进值... 查看详情

一起talkandroid吧(第四百五十七回:修改view的布局参数)(代码片段)

...布局参数"。闲话休提,言归正转,让我们一起TalkAndroid吧!使用背景我们在项目中使用的布局参数是在xml布局文件中配置的,在程序运行前已经配置好 查看详情