您的位置:首页 > 移动开发 > Android开发

Android解析之三分钟教你快速掌握并使用GSON解析Json

2016-04-18 17:19 519 查看
目前网络数据都是以json格式返回到客户端,而解析json的方式却有好多种。在项目中比较常用的是Gson解析,那么接下来,由我为大家讲解如何快速掌握使用Gson解析多种复杂json。

首先大家心里要明白以下几个问题:

1. 什么是Gson?

2. 为什么要使用Gson解析json?使用Gson解析json有什么优势?

3. 如何快速有效理解并掌握使用Gson解析json?

现在我们来回顾一下,什么是json?

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言

JSON 具有自我描述性,更易理解

总之, JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

给大家推荐一个Json在线解析及格式化验证网址:http://www.bejson.com//

回归正题,下面开始解答在片头提出的三个问题:

什么是Gson?

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。

为什么要使用Gson解析json?使用Gson解析json有什么优势?

首先使用Gson解析可以很方便的将一个 Json 字符串转成一个 Java 对象,或者将一个Java对象转成一个Json字符串(前提注意,java对象属性要和json中要字段一一对应,否则解析失败)。其次,我个人觉得,使用Gson解析很方便,你想想,实体类和json对应,而且Gson中会提供直接转java或者json的方法,只需寥寥几行就可以实现,对我LZ脑子反应慢的人来说,真是解析Json必备利器之一哈。。。

如何快速有效理解并掌握使用Gson解析json?

其实我理解的就是Gson解析json就是,首先会有一个和json字符串相对应的Java Bean。其次,使用Gson所提供的toJson()将实体类转化为json格式的字符串,或者使用fromJson()将json格式的字符串直接转为你的实体类。其中涉及到java反射,射来射去的,有兴趣的大家可以自己去了解一下

下面为大家介绍Gson解析中所提供的很强大的方法:

1.1 toJson()方法

  toJson()方法用于将Java对象转换为相应的JSON数据,主要有以下几种形式:

  (1)String toJson(JsonElement jsonElement);

  (2)String toJson(Object src);

  (3)String toJson(Object src, Type typeOfSrc);

  其中,方法(1)用于将JsonElement对象(可以是JsonObject、JsonArray等)转换成JSON数据;方法(2)用于将指定的Object对象序列化成相应的JSON数据;方法(3)用于将指定的Object对象(可以包括泛型类型)序列化成相应的JSON数据。

1.2 fromJson()方法

  fromJson()方法用于将JSON数据转换为相应的Java对象,主要有以下几种形式:

  (1) T fromJson(JsonElement json, Class classOfT);

  (2) T fromJson(JsonElement json, Type typeOfT);

  (3) T fromJson(JsonReader reader, Type typeOfT);

  (4) T fromJson(Reader reader, Class classOfT);

  (5) T fromJson(Reader reader, Type typeOfT);

  (6) T fromJson(String json, Class classOfT);

  (7) T fromJson(String json, Type typeOfT);

  以上的方法用于将不同形式的JSON数据解析成Java对象。

啰嗦了这么多,接下来开始实战。。。

下载一个gson包,并导入项目工程中…

提供我当前使用的json字符串如下:

json串太长,拷贝时没注意,竟然不正确,不过不妨碍大家继续学习,暂时删除此json数据

看到这么一堆json串串,是不是感觉有点头大,不急,我们现在打开上面提供的Json在线解析及格式化验证网址:http://www.bejson.com//。我们一起来分析分析,赤裸裸站在我们面前~

把小减号点击完之后是如下效果:



这里面包括了

三个字段(message,today,code),俩个List(List,List)以及一个对象(CourseOneStageBean)。

首先在xxx.xxx.httpbeans下创建当前接受json的实体类,格式如下:

public class MessageBigBeansAndRecommendCommodityBean {

private int code;//返回Code码
private String message;//返回信息
private String today;//当前时间
private CourseOneStageBean courseonestagebean;// 课程阶段
private List<AppMessageBigBean> appMessageBigBeans;// 资讯推荐list
private List<AppRecommendCommodityBean> appRecommendCommodityBeans;// 为您推荐(商品定制)

public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}

public String getToday() {
return today;
}

public void setToday(String today) {
this.today = today;
}

public CourseOneStageBean getCourseOneStageBean() {
return courseonestagebean;
}

public void setCourseOneStageBean(CourseOneStageBean courseOneStageBean) {
this.courseonestagebean = courseOneStageBean;
}

public List<AppMessageBigBean> getAppMessageBigBeans() {
return appMessageBigBeans;
}

public void setAppMessageBigBeans(List<AppMessageBigBean> appMessageBigBeans) {
this.appMessageBigBeans = appMessageBigBeans;
}

public List<AppRecommendCommodityBean> getAppRecommendCommodityBeans() {
return appRecommendCommodityBeans;
}

public void setAppRecommendCommodityBeans(List<AppRecommendCommodityBean> appRecommendCommodityBeans) {
this.appRecommendCommodityBeans = appRecommendCommodityBeans;
}

}


其中关于CourseOneStageBean ,AppMessageBigBean,AppRecommendCommodityBean这三个实体类属性和json中一一对应,这几个实体类可以放在xxx.xxx.beans下,以便更好的区分网络接收所需的Java Bean和本地所需Java Bean。

只要你确认上面实体类和json中一一对应,下面都是小意思啦。。。

Gson gson = new Gson();
//json转JavaBean
MessageBigBeansAndRecommendCommodityBean messageBigBeansAndRecommendCommodityBean = gson.fromJson("Json字符串", MessageBigBeansAndRecommendCommodityBean.class);
//JavaBean转json
String json=gson.toJson(messageBigBeansAndRecommendCommodityBean);


第一次认认真真写一篇博客。。。有问题可以大家一起研究~虽然我懂得不多~哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gson android 解析json