我们在编写android程序的时候,当涉及到网络交互的时候,需要对数据的格式进行规范。目前最常用的两种格式是XML格式和JSON格式,XML且不谈,我们先来说说JSON。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。------来自度娘
下面进入干货,分享关于我解析JSON数据时的步骤------
拿到一个JSON数据,首先从一个简单的JSON数据开始:
上图更直观点。
JSON中{ }中间的是一个JSONObject,而[ ]之间是JSONArray。
JSON是按照key-value配对的,在JSONObject中key是一个String,在JSONArray中key是int。
看上图,可以看到JSON数据很有层次结构。因为数据很简单,我们就不用辅助工具来观察。
我们先看到最外面的一个{ },这个是JSON数据的根节点,我们设置一个Root类。
Root类:
Root类里面有三个变量,初始化它们。
Public class Root{
private String reason;
private Result result;
private int error_code;
//然后对着三个变量getter()和 setter();
}
Tips:在Android Studio中有快捷键,光标停留在你要添加方法的地方,鼠标右键-> Generate -> ,方便又快捷。
二、
在上面代码中我们自定义了一个Result类,我们现在来实现这个类,
public class Result{
private String title;
private List<Bean_Station> list;
//getter() 和 setter()方法;
}
上面代码我们使用了一个List<Bean_Station>,我们在看JSON数据中的对应”list”这个key是一个[ ],表示list里面是一个数组,数组里面又是一个新的JSONObject,所以我们要把它定义成为一个list<?>的类型。
Tips:在你命名类名的时候可以不按照key值命名,可是当你实例化这个类为对象的时候一定要用key值对应的为这个实例的名字,不然会报错的。比如List<Bean_Station>就一定要命名为list,不能为其他的名字。我不会告诉你我之前就犯过这个错误的~
最后就是实现Bean_Station这个类了,还是一样的
public class Bean_Station{
private String name;
private String tel;
private String adds;
//对应的setter()和getter();
}
下载GSON.jar,网上资源一大把,粘贴在libs目录下,点击右键,add as library,等AS自动构建一下,就可以使用GSON这个库了。
在MainActivity两行代码搞定问题
Gson gson = new Gson();
//Config.testJSON3是我放在本地的数据,也就是刚刚那个数据已一个字符串形式保存的
Root root = gson.fromJson(Config.testJSON3, Root.class);
得到的root对象,我们来打断点调试一下看看里面的数据
以上是简单解析JSON数据的步骤。
其实到了现在,建立JavaBean这种繁复却可以找到规律的工作,已经可以不需要我们程序员自己实现了,有很多种方法可以完成,减少我们的工作量。
网址:http://www.atool.org/json2javabean.php
这是在百度搜索到的一个在线JSON转化为JavaBean工具,感觉蛮不错的,推荐给大家
而且当你输入的JSON数据有错时,会提示你出错的位置,比较方便。
安装方法:File -> Setting -> Plugins -> Browse repositories -> input GsonFormat -> install -> restart Android Studio
图片示例如下:
安装完成后,可以来试验GsonFormat到底如何了,我们来测试一下。
新建一个类,命名为Test.class
在类中,右键Generate -> GsonFormat -> input JSON data -> OK,
这次我们输入一个稍微复杂的JSON数据,来自于聚合数据 -> 天气预报接口
可以看到,我们生成了Virgo Model视图。
视图内对应Key,Value,Data Type, FiledName,
点击 OK,在Test类里面生成了JAVA代码,我们来看Test类的Structure目录,其中有一个小问题,他其中有重复类名,Pm25Entity有两个。
改变类的名字,完事。
我们在MainActivity里面使用GSON.jar,Debug一下。
完美。
当下次我们需要解析从服务器获取的JSON数据的时候,如果需要构建JavaBean的话,我们可以用GsonFormat构建JavaBean,然后用GSON.jar中的Gson.fromJSON(“JSON数据”,JavaBean.class),(注意JSON数据里面有一些重复的类名的时候会导致出错,在Structure目录中找找是否有重复类)。