首页 理论教育 JSON入门:实用HiJson工具解析JSON数据

JSON入门:实用HiJson工具解析JSON数据

时间:2023-06-30 理论教育 版权反馈
【摘要】:图5.1JSON对象JSON数组:JSON数组在方括号中书写,数组可包含多个value,如图5.2所示,在移动开发项目中value为对象的较为常见。HiJson是一款非常小巧实用的工具,它可以将JSON数据以树的形式展现出来,方便JSON字符串的查看。

JSON入门:实用HiJson工具解析JSON数据

1.实验目的

(1)熟悉JSON(JavaScript Object Notation,JavaScript对象表示法)数据的基本解析方法。

(2)熟悉用Material Design基础的控件实现侧滑菜单的方法。

2.JSON基础

JSON是一种轻量级的存储和交换文本信息的语法,是目前使用非常广泛的一种数据交换格式,官方网站为www.json.org。和另一种使用非常广泛的语言XML相比,JSON具有解码方便、数据体积小等优点,但数据的描述性没有XML语言直观。JSON常用的形式有JSON对象和JSON数组两种。

•JSON对象(object):JSON对象在花括号中书写,对象可以包含多个键值对(string/value pair),如图5.1所示,图5.1中value的取值可以是:string、number、object、array、true、false、null。例如:{"first Name":"John","last Name":"Doe"}。

图5.1 JSON对象

•JSON数组(array):JSON数组在方括号中书写,数组可包含多个value,如图5.2所示,在移动开发项目中value为对象的较为常见。例如:

图5.2 JSON数组

在中大型的项目中,服务器和移动客户端经常采用JSON数据进行交互,所以JSON数据一般比较复杂,一般使用HiJson查看JSON数据。HiJson是一款非常小巧实用的工具,它可以将JSON数据以树的形式展现出来,方便JSON字符串的查看。例如,要查看JSON字符串{"name":"Michael","address":{"city":"Beijing","postcode":100025,"street":"Chaoyang Road"}},将该字符串复制到HiJson的左侧,然后单击“格式化JSON字符串”,就可以格式化输入的JSON字符串,并且以树的形式在右侧进行展示,如图5.3所示。

图5.3 HiJson的使用

Android自带JSON解析数据Json Reader类,另外Google公司提供了Gson解析JSON数据。Gson提供了一种将Java对象转换为JSON数据或将JSON数据转换为Java对象的方法,它可以解析任意复杂度的JSON数据。

3.侧滑菜单

侧滑菜单是指将一些菜单选项隐藏起来,而不是放在主屏幕上,然后通过滑动的方式将菜单显示出来。侧滑菜单的实现方式有很多种,如使用自带控件、第三方开源框架等方式。本实验采用Material Design视图Drawer Layout和Navigation View实现,这种实现方式需要导入相关依赖库,如implementation com.android.support:design:28.0.0。

Drawer Layout是一个布局,允许在布局中放入两个直接子控件,第一个控件是主屏幕中显示的内容,第二个则是隐藏的控件,通过滑动来显示内容。以下两个方法是Drawer Layout常用的方法。

•Drawer Layout.openDrawer(Gravity.START):从左侧打开侧滑菜单。

•Drawer Layout.closeDrawers():关闭所有侧滑菜单。

Navigation View可以填充头部布局和菜单布局,还可以添加任意布局。一般Material Design风格的侧滑菜单分为两个部分,上面是头部,下面为功能菜单,如图5.4所示,因此我们需要定义两个布局文件,分别对应头部和菜单。Navigation View布局文件常用的属性如下所示。

图5.4 侧滑菜单示例

•app:header Layout="@layout/header":绑定头部布局文件。这里绑定的是layout目录下的header.xml布局文件。

•app:menu="@menu/nav_menu":在布局文件的Navigation View中添加功能菜单。这里绑定的是一个菜单布局文件,该文件放在res\menu目录下,使用的是menu目录下的nav_menu.xml文件,菜单中使用的图片选中和取消选中效果可以通过在nav_menu.xml文件中设置图片的Selector实现。

•app:theme="@style/navigationDrawerStyle":设置菜单的样式,如侧滑菜单的颜色、字体、文字大小等效果。这里表示采用了res\values目录下styles.xml文件中的navigation DrawerStyle样式。

•app:item Text Color="@drawable/text_selector":设置侧滑菜单中文字选中和取消选中效果。

4.实验界面与功能

本实验的主要功能是通过侧滑菜单展示JSON数据常用的3种解析方式:自带的Json Reader解析方法、Gson解析JSON对象和Gson解析JSON数组。图5.5(a)所示是初始界面,当点击标题旁的按钮时,弹出图5.5(b)所示的侧滑菜单,点击任意一个菜单将出现解析的JSON字符串和解析后的结果,如图5.5(c)所示。

5.实验步骤

步骤1:创建模块App12,并配置好Butter Knife和Material Design控件所需要的环境,具体可参考第4章Handler实验中的步骤4~7。

图5.5 实验界面

步骤2:图5.6所示为本实验的文件结构。首先将两张图片放入mipmap目录下,然后修改colors.xml文件中的状态栏标题栏的颜色。

图5.6 App12模块文件结构

步骤3:在styles.xml中添加样式,为侧滑菜单中的文字设置样式,该样式将用于侧滑菜单的布局文件中。

步骤4:在strings.xml中添加常量供界面使用,其中取值部分包含HTML标签,在解析时按HTML标签的语义进行设置,“font color”标签设置文字颜色,“bold”标签表示文字加粗,“big”标签表示加大,“ ”表示空格,“br”标签表示换行。

步骤5:在layout目录下新建一个布局文件header.xml,作为侧滑菜单头部内容。

步骤6:在res目录下新建一个menu文件夹,在该文件夹中新建一个菜单文件并将其命名为nav_menu.xml,在该文件中放入3个菜单选项(item),将其作为侧滑菜单选项。

步骤7:完成侧滑菜单外观设计。在前面两个步骤中已经为侧滑菜单做了准备,需要将以上两个文件整合到一个文件中,所以需要将activity_main.xml修改为抽屉布局。为了方便代码中调用,需要为该布局定义ID。在该布局中先放入一个任意布局,本实验使用了一个Linear Layout,这个布局即为未出现侧滑菜单时的界面。然后,在抽屉布局中放入Navigation View,设置ID的值,并且设置侧滑菜单从左侧滑出,在该布局中,头部布局采用header.xml文件,菜单布局则采用nav_menu.xml文件,菜单采用navigationDrawerStyle样式,该样式中仅定义了菜单选项的字号。

步骤8:打开Main Activity.java文件,在“setContent View(R.layout.activity_main);”中右击布局文件名称,在弹出的菜单中依次选择“Generate…”|“Generate Butterknife Injections”,在弹出的对话框中,选中导航栏Navigation View、抽屉布局Drawer Layout、显示文本的Text View前面的复选框和Navigation View后面的OnClick复选框,用以获取这三个控件,并生成相关点击事件。

步骤9:定义Main Activity.java需要使用的全局变量

步骤10:设置工具栏按钮弹出侧滑菜单。需要在标题栏上添加一个按钮来提示用户有隐藏的菜单,当点击该按钮时弹出隐藏菜单。

(www.xing528.com)

步骤11:新建Json Utils1类,在该类中新建parseJson()方法,采用Android自带的JsonReader类解析数组,这里要解析JSON字符串[{"name":Jhon,"age":21},{"name":"Mike","age":22}]。

步骤12:下面介绍使用Google公司提供的Gson开发包的解析方法。首先引入Gson依赖。单击Android Studio工具栏上的Project Structure按钮,在弹出的窗口中单击“Dependencies”|“App12”,再单击“+”,如图5.7所示,在弹出的菜单中选择“Library Dependencies”,在弹出的窗口中搜索“gson”,然后选中最高版本,如图5.8所示。

图5.7 引入Gson的包

图5.8 在已配置的仓库中搜索Gson的包

步骤13:使用Gson进行解析需要新建User对象类,这个类是一个Java Bean,可以实现将JSON数据转换成Java对象。使用Gson解析JSON数据时,对象定义原则如下。

•遇到JSON数据“{}”则创建对象,遇到“[]”则创建集合(Array List)。

•创建的对象中所有字段名称要和JSON返回字段一致。

根据以上原则,User类中只有两个字段:name和age,代码如下所示。

该类创建完成后右击空白处,在弹出的菜单中选择“Generate…”|“Getter and Setter”,在弹出的对话框中选中“name”和“age”字段,单击“OK”按钮,然后就生成了Getter和Setter方法,如图5.9所示。

图5.9 生成Getter和Setter方法

步骤14:新建Json Utils2类,采用Gson自带的Json Reader类解析JSON对象,当前要解析的JSON数据是{"name":"Jhon","age":21}。

步骤15:新建Json Utils3类,采用Gson自带的JsonReader类解析JSON数组,当前要解析的JSON数据是[{"name":Jhon,"age":21},{"name":"Mike","age":22}]。

步骤16:在侧滑菜单3个选项的触发函数中分别调用3种JSON解析方法。

步骤17:运行并测试App12。

知识拓展:程序调试

程序调试是定位故障的重要方法,是程序员入门必备技能。下面以本实验为例介绍Android程序调试的方法。

步骤1:设置断点:找到可能发生问题的代码行,单击前面空白处,如图5.10所示。

图5.10 设置断点

步骤2:开启调试会话:通过单击工具栏的调试按钮,在模拟器或真机上使用调试模式运行该应用程序,代码执行到步骤1中的断点处时会出现图5.11所示的调试窗口。

图5.11 调试窗口

步骤3:在调试窗口中有以下几种调试方式。

•单步调试(Step Over):单击按钮即可进入单步调试,快捷键为“F8”。执行单步调试程序向下执行一行。如果当前行调用了其他方法,执行单步调试将直接获得该方法的结果,并不跳入方法进行跟踪。

•步入调试(Step Into):单击按钮(蓝色)将步入调用的方法继续调试,快捷键为“F7”。如果当前行没有调用方法,则将执行下一行。例如,在程序执行到图5.11中“startPlayer(pos);”代码处按F7键,则会跳入图5.12中“private void startPlayer(int pos)”方法定义处执行,并且在调试窗口和程序窗口中可以查看入参pos的取值。使用步出调试可以跳出该方法,回到原来的位置继续进行调试。

图5.12 执行startPlayer方法

•强制步入调试(Force Step Into):步入调试只能进入自定义的方法进行调试,而单击按钮(红色)或者使用快捷键“Alt+Shift+F7”可以进入任何方法进行调试。例如,在图5.12中代码“intent.set Action("cn.edu.android.app09.MusicService");”处单击强制步入调试按钮,则调试程序进入Intent的set Action()方法进行调试,如图5.13所示。

•步出调试(Step Out):在图5.13中单击按钮或者使用快捷键“Shift+F8”可以执行完当前方法,并跳出Intent的set Action()方法,回到原来调用处的下一行语句继续进行调试。

•跨断点调试(Resume Program):在设置多断点的情况下,单击按钮或者按F9键可以直接进入下一个断点进行调试。如果后面没有断点,单击该按钮将会执行完程序。

•查看断点(View Break Points):单击按钮,会弹出图5.14所示的断点窗口,这里可以对已经设置的断点增加条件。例如,在第49行断点处在Condition中增加pos==1,那么该断点只有当变量pos等于1时才有效。

图5.13 调试Intent的set Action()方法

图5.14 断点窗口

•设置变量:右击变量窗口可以通过“New Watch…”选项增加查看的变量,通过“Remove Watch”删除查看的变量,通过“Remove All Watches”删除所有查看的变量,如图5.15所示。

•停止调试(Stop):单击按钮或者使用快捷键“Ctrl+F2”停止调试。

图5.15 调试变量的操作

思考

(1)本实验的侧滑菜单中菜单选项的文字采用默认颜色,如何改变菜单选项文字的颜色,并且设置选中和未选中时对应的两种颜色?

(2)本实验中所采用的JSON数据比较简单,在上架的App中用到的JSON数据基本都具有一定的复杂度,如图5.16所示,这样的JSON数据如何解析?

图5.16 HiJson查看结构复杂的JSON数据

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈