解析JSON数据的详细步骤以及偷懒技巧(使用第三方库GSON以及GsonFormat工具)

什么是JSON?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括CC++C#JavaJavaScriptPerlPython等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)------来自百度

 

下面进入干货,分享关于我解析JSON数据时的步骤------

拿到一个JSON数据,首先从一个简单的JSON数据开始:

 

上图更直观点。

JSON{ }中间的是一个JSONObject,而[ ]之间是JSONArray

JSON是按照key-value配对的,在JSONObjectkey是一个String,在JSONArraykeyint

构建JavaBean(把JSON数据转化为JavaBean)

看上图,可以看到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数据有错时,会提示你出错的位置,这点比较好。

    方法二:Android Studio强大的插件-------GsonFormat

安装方法:File -> Setting -> Plugins -> Browse repositories -> input GsonFormat -> install -> restart Android Studio

图片示例如下:


 

安装完成后,可以来试验GsonFormat到底如何了,我们来测试一下。

新建一个类,命名为Test.class

在类中,右键Generate -> GsonFormat -> input JSON data -> OK

这次我们输入一个稍微复杂的JSON数据,来自于聚合数据 -> 天气预报接口

可以看到,我们生成了Virgo Model视图。

视图内对应KeyValueData Type, FiledName


 

点击 OK,在Test类里面生成了JAVA代码,我们来看Test类的Structure目录,其中有一个小问题,他其中有重复类名,Pm25Entity有两个。

 

改变类的名字,完事。

 

我们在MainActivity里面使用GSON.jarDebug一下。

 

完美。

  Tips:

1.在JSON数据中或许有些不同的list有同名的对象,如果你是把JavaBean构建成多个类的形式的话这个自然没有影响,可是GsonFormat默认的是构建成一个类里面,其他的使用静态内部类嵌套实现。这样的话同名的类名会报错,这点要特别注意,可以在Structure视图中寻找重复的类名,改掉就行。

  2.在这个类中,有的时候测试的时候会发现获取数据失败了,这多半是因为JavaBean的写法出现了点小问题。注意的你的变量名一定要和JSON数据中每个节点的名字一样。否则GSON解析的时候,会无法识别。例如    某个子节点的名称是 time,你因为后面有重复的time节点,所以你在JavaBean命名的时候把这个类的名称设置为CurrentTime,编译器有的时候就给变量设置为currentTime,然后会发现解析出错了。其实你类名设置成什么都无所谓,只要你的变量名和JSON数据的子节点名称相同就行了,即这里设置为CurrentTime time即可。

总结

当下次我们需要解析从服务器获取的JSON数据的时候,如果需要构建JavaBean的话,我们可以用GsonFormat构建JavaBean,然后用GSON.jar中的Gson.fromJSON“JSON数据”,JavaBean.class)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值