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

android json数据解析(二)

2016-10-11 22:54 417 查看

1.Gson的相关简介

Gson是由Google封装的解析json数据的java API,该类可以直接调用fromJson()将json数据转换成JavaBean的形式,它是一种实现反序列化过程;还可以调用toJson()将JavaBean的数据格式转换成json数据,它是一种实现序列化的过程。

2.Gson的用法

1.导入Gson的jar包,下载地址:http://download.csdn.net/detail/zhangxing52077/9651662

2.toJson()的用法:将javabean转成json数据

public void JavaBeanBuild(){
Gson gson = new Gson();
Zhangxing zhangxing = new Zhangxing();
zhangxing.setName("zhangxing");
zhangxing.setAge(24);
zhangxing.setSex("男");
zhangxing.setHabits(new String[]{"敲代码","写作","听歌"});
zhangxing.setCar(null);
zhangxing.setMarried(false);
KLog.e(gson.toJson(zhangxing));
}


3.fromJson()的用法:

String jsonData = gson.toJson(zhangxing);
Zhangxing xaioxing = gson.fromJson(jsonData,Zhangxing.class);
String name = xaioxing.getName();
KLog.e(name);
在这里,介绍一下,KLog是一种开源的打印工具类,直接在build.gradle中添加依赖即可使用:

compile 'com.github.zhaokaiqiang.klog:library:0.0.1'


4.注解@SerializedName的用法

①.POJO的介绍

POJO通俗的理解就是,最普通,最简单的javabean对象,该类没有继承任何类,也没实现任何借口的类.

②POJO与JavaBean的区别:

POJO: 它用于临时数据的传递,只能装载数据,作为数据存储的载体,不具备业务逻辑处理的能力。

JavaBean:

1.这个类必须有一个公共的缺省构造函数;

2.这个类的属性使用getter和setter来访问

3.这个类是可序列化的。

②.使用的场景

我们所期望的json格式:

{"name":"怪盗kidou","age":24,"emailAddress":"ikidou@example.com"}
然而实际的json格式:

{"name":"怪盗kidou","age":24,"email_address":"ikidou@example.com"}
这两种写法虽然大同小异,但是在实际的应用开发中,不可小觑,一个标点的不同可能使程序发生错误,所以,这里的注解有效的解决了这个问题,两者兼备,貌似一个强大的兼容器。

@SerializedName("email_address")
public String emailAddress;
那么,在json数据中的email_adress在javabean中就变成了emailAdress了。

③.alternate为POJO字段提供备选字段名

@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
public String emailAddress;
在这里,当上面三个属性{emailAdress,email,email_Adress}出现任何一个,都可以得到正确的结果。

3.在项目中的应用实例

1.GsonFormat的引入

①GsonFormat的介绍

GsonFormat是一个能够直接将json数据转化为javabean的插件

②GsonFormat的安装

在android studio的Ide中依次打开:File-->settings-->plugins,然后在右边的输入框中输入GsonFormat搜索,最后点击下载安装就ok了



这里我已经安装了就不用再次安装了。

③GsonFormat的应用

1>.新建一个JavaBean

2>.在类中右击鼠标,点击Generate,再点击GsonFormat,然后把json数据复制到json框中,最后就自动生成了javabean,对了,别太开心忘记实现serializable接口了;极力推荐这种方法,这样只要json数据没错的话,javabean一定也没问题喽,屡试不爽的给力工具,哈哈。

2.Gson在实际项目的应用(本次应用调用了聚合数据的12306火车票查询的ip)

①.利用GsonFormat自动生成javabean

public class Movie implements Serializable {

/**
* resultcode : 200
* reason : Successed!
* result : {"train_info":{"name":"G656","start":"西安北","end":"北京西","starttime":"10:10","endtime":"16:27","mileage":"1212km"},"station_list":[{"train_id":"1","station_name":"西安北","arrived_time":"-","leave_time":"10:10","mileage":"-","fsoftSeat":"-","ssoftSeat":"-","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"-","swz":"-","tdz":"-","gjrw":"-","stay":"-"},{"train_id":"2","station_name":"渭南北","arrived_time":"10:29","leave_time":"10:31","mileage":"63km","fsoftSeat":"44.5","ssoftSeat":"29.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"29.5","swz":"90.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"3","station_name":"华山北","arrived_time":"10:51","leave_time":"11:02","mileage":"121km","fsoftSeat":"89.5","ssoftSeat":"54.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"54.5","swz":"175.5","tdz":"-","gjrw":"-","stay":"11"},{"train_id":"4","station_name":"三门峡南","arrived_time":"11:35","leave_time":"11:37","mileage":"257km","fsoftSeat":"189.5","ssoftSeat":"119.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"119.5","swz":"372.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"5","station_name":"渑池南","arrived_time":"11:54","leave_time":"11:56","mileage":"315km","fsoftSeat":"229.5","ssoftSeat":"144.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"144.5","swz":"456.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"6","station_name":"洛阳龙门","arrived_time":"12:15","leave_time":"12:17","mileage":"380km","fsoftSeat":"279.5","ssoftSeat":"174.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"174.5","swz":"550.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"7","station_name":"巩义南","arrived_time":"12:31","leave_time":"12:33","mileage":"430km","fsoftSeat":"314.0","ssoftSeat":"199.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"199.0","swz":"623.0","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"8","station_name":"郑州","arrived_time":"13:06","leave_time":"13:09","mileage":"505km","fsoftSeat":"369.0","ssoftSeat":"229.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"229.0","swz":"731.0","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"9","station_name":"郑州东","arrived_time":"13:25","leave_time":"13:28","mileage":"519km","fsoftSeat":"379.0","ssoftSeat":"237.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"237.0","swz":"749.0","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"10","station_name":"邯郸东","arrived_time":"14:21","leave_time":"14:25","mileage":"756km","fsoftSeat":"536.0","ssoftSeat":"335.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"335.0","swz":"1059.0","tdz":"-","gjrw":"-","stay":"4"},{"train_id":"11","station_name":"石家庄","arrived_time":"15:04","leave_time":"15:07","mileage":"931km","fsoftSeat":"651.5","ssoftSeat":"407.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"407.5","swz":"1286.5","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"12","station_name":"涿州东","arrived_time":"15:59","leave_time":"16:02","mileage":"1150km","fsoftSeat":"785.5","ssoftSeat":"491.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"491.5","swz":"1551.5","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"13","station_name":"北京西","arrived_time":"16:27","leave_time":"16:27","mileage":"1212km","fsoftSeat":"822.5","ssoftSeat":"513.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"513.5","swz":"1623.5","tdz":"-","gjrw":"-","stay":"-"}]}
* error_code : 0
*/

private String resultcode;
private String reason;
/**
* train_info : {"name":"G656","start":"西安北","end":"北京西","starttime":"10:10","endtime":"16:27","mileage":"1212km"}
* station_list : [{"train_id":"1","station_name":"西安北","arrived_time":"-","leave_time":"10:10","mileage":"-","fsoftSeat":"-","ssoftSeat":"-","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"-","swz":"-","tdz":"-","gjrw":"-","stay":"-"},{"train_id":"2","station_name":"渭南北","arrived_time":"10:29","leave_time":"10:31","mileage":"63km","fsoftSeat":"44.5","ssoftSeat":"29.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"29.5","swz":"90.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"3","station_name":"华山北","arrived_time":"10:51","leave_time":"11:02","mileage":"121km","fsoftSeat":"89.5","ssoftSeat":"54.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"54.5","swz":"175.5","tdz":"-","gjrw":"-","stay":"11"},{"train_id":"4","station_name":"三门峡南","arrived_time":"11:35","leave_time":"11:37","mileage":"257km","fsoftSeat":"189.5","ssoftSeat":"119.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"119.5","swz":"372.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"5","station_name":"渑池南","arrived_time":"11:54","leave_time":"11:56","mileage":"315km","fsoftSeat":"229.5","ssoftSeat":"144.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"144.5","swz":"456.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"6","station_name":"洛阳龙门","arrived_time":"12:15","leave_time":"12:17","mileage":"380km","fsoftSeat":"279.5","ssoftSeat":"174.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"174.5","swz":"550.5","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"7","station_name":"巩义南","arrived_time":"12:31","leave_time":"12:33","mileage":"430km","fsoftSeat":"314.0","ssoftSeat":"199.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"199.0","swz":"623.0","tdz":"-","gjrw":"-","stay":"2"},{"train_id":"8","station_name":"郑州","arrived_time":"13:06","leave_time":"13:09","mileage":"505km","fsoftSeat":"369.0","ssoftSeat":"229.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"229.0","swz":"731.0","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"9","station_name":"郑州东","arrived_time":"13:25","leave_time":"13:28","mileage":"519km","fsoftSeat":"379.0","ssoftSeat":"237.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"237.0","swz":"749.0","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"10","station_name":"邯郸东","arrived_time":"14:21","leave_time":"14:25","mileage":"756km","fsoftSeat":"536.0","ssoftSeat":"335.0","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"335.0","swz":"1059.0","tdz":"-","gjrw":"-","stay":"4"},{"train_id":"11","station_name":"石家庄","arrived_time":"15:04","leave_time":"15:07","mileage":"931km","fsoftSeat":"651.5","ssoftSeat":"407.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"407.5","swz":"1286.5","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"12","station_name":"涿州东","arrived_time":"15:59","leave_time":"16:02","mileage":"1150km","fsoftSeat":"785.5","ssoftSeat":"491.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"491.5","swz":"1551.5","tdz":"-","gjrw":"-","stay":"3"},{"train_id":"13","station_name":"北京西","arrived_time":"16:27","leave_time":"16:27","mileage":"1212km","fsoftSeat":"822.5","ssoftSeat":"513.5","hardSead":"-","softSeat":"-","hardSleep":"-","softSleep":"-","wuzuo":"513.5","swz":"1623.5","tdz":"-","gjrw":"-","stay":"-"}]
*/

private ResultBean result;
private int error_code;

public String getResultcode() {
return resultcode;
}

public void setResultcode(String resultcode) {
this.resultcode = resultcode;
}

public String getReason() {
return reason;
}

public void setReason(String reason) {
this.reason = reason;
}

public ResultBean getResult() {
return result;
}

public void setResult(ResultBean result) {
this.result = result;
}

public int getError_code() {
return error_code;
}

public void setError_code(int error_code) {
this.error_code = error_code;
}

public static class ResultBean {
/**
* name : G656
* start : 西安北
* end : 北京西
* starttime : 10:10
* endtime : 16:27
* mileage : 1212km
*/

private TrainInfoBean train_info;
/**
* train_id : 1
* station_name : 西安北
* arrived_time : -
* leave_time : 10:10
* mileage : -
* fsoftSeat : -
* ssoftSeat : -
* hardSead : -
* softSeat : -
* hardSleep : -
* softSleep : -
* wuzuo : -
* swz : -
* tdz : -
* gjrw : -
* stay : -
*/

private List<StationListBean> station_list;

public TrainInfoBean getTrain_info() {
return train_info;
}

public void setTrain_info(TrainInfoBean train_info) {
this.train_info = train_info;
}

public List<StationListBean> getStation_list() {
return station_list;
}

public void setStation_list(List<StationListBean> station_list) {
this.station_list = station_list;
}

public static class TrainInfoBean {
private String name;
private String start;
private String end;
private String starttime;
private String endtime;
private String mileage;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getStart() {
return start;
}

public void setStart(String start) {
this.start = start;
}

public String getEnd() {
return end;
}

public void setEnd(String end) {
this.end = end;
}

public String getStarttime() {
return starttime;
}

public void setStarttime(String starttime) {
this.starttime = starttime;
}

public String getEndtime() {
return endtime;
}

public void setEndtime(String endtime) {
this.endtime = endtime;
}

public String getMileage() {
return mileage;
}

public void setMileage(String mileage) {
this.mileage = mileage;
}
}

public static class StationListBean {
private String train_id;
private String station_name;
private String arrived_time;
private String leave_time;
private String mileage;
private String fsoftSeat;
private String ssoftSeat;
private String hardSead;
private String softSeat;
private String hardSleep;
private String softSleep;
private String wuzuo;
private String swz;
private String tdz;
private String gjrw;
private String stay;

public String getTrain_id() {
return train_id;
}

public void setTrain_id(String train_id) {
this.train_id = train_id;
}

public String getStation_name() {
return station_name;
}

public void setStation_name(String station_name) {
this.station_name = station_name;
}

public String getArrived_time() {
return arrived_time;
}

public void setArrived_time(String arrived_time) {
this.arrived_time = arrived_time;
}

public String getLeave_time() {
return leave_time;
}

public void setLeave_time(String leave_time) {
this.leave_time = leave_time;
}

public String getMileage() {
return mileage;
}

public void setMileage(String mileage) {
this.mileage = mileage;
}

public String getFsoftSeat() {
return fsoftSeat;
}

public void setFsoftSeat(String fsoftSeat) {
this.fsoftSeat = fsoftSeat;
}

public String getSsoftSeat() {
return ssoftSeat;
}

public void setSsoftSeat(String ssoftSeat) {
this.ssoftSeat = ssoftSeat;
}

public String getHardSead() {
return hardSead;
}

public void setHardSead(String hardSead) {
this.hardSead = hardSead;
}

public String getSoftSeat() {
return softSeat;
}

public void setSoftSeat(String softSeat) {
this.softSeat = softSeat;
}

public String getHardSleep() {
return hardSleep;
}

public void setHardSleep(String hardSleep) {
this.hardSleep = hardSleep;
}

public String getSoftSleep() {
return softSleep;
}

public void setSoftSleep(String softSleep) {
this.softSleep = softSleep;
}

public String getWuzuo() {
return wuzuo;
}

public void setWuzuo(String wuzuo) {
this.wuzuo = wuzuo;
}

public String getSwz() {
return swz;
}

public void setSwz(String swz) {
this.swz = swz;
}

public String getTdz() {
return tdz;
}

public void setTdz(String tdz) {
this.tdz = tdz;
}

public String getGjrw() {
return gjrw;
}

public void setGjrw(String gjrw) {
this.gjrw = gjrw;
}

public String getStay() {
return stay;
}

public void setStay(String stay) {
this.stay = stay;
}
}
}
}
②.Gson的解析

protected void onPostExecute(String result) {
if (result != null) {
Gson gson = new Gson();
Movie movie = gson.fromJson(result,Movie.class);
String resultCode = movie.getResultcode();
if (resultCode.equals("200")) {
String trainName = movie.getResult().getTrain_info().getName();
String  start = movie.getResult().getTrain_info().getStart();
String  end = movie.getResult().getTrain_info().getEnd();
String  startTime = movie.getResult().getTrain_info().getStarttime();
String  endTime = movie.getResult().getTrain_info().getEndtime();
String  miCheng = movie.getResult().getTrain_info().getMileage();
List<Movie.ResultBean.StationListBean> stationList = new ArrayList<Movie.ResultBean.StationListBean>();
stationList = movie.getResult().getStation_list();
String slist = "";

for(int i=0;i<stationList.size();i++){
slist += stationList.get(i).getStation_name()+",";
}

tv_result.setText("列车车次"+":"+trainName+"\n"
+"起点站"+":"+start+"\n"
+"终点站"+":"+end+"\n"
+"出发时间"+":"+startTime+"\n"
+"到站时间"+":"+endTime+"\n"
+"里程"+":"+miCheng+"\n"
+"经过站点名称:"+"{"+slist+"}"+"\n"
);
}else {
Toast.makeText(context, "查询失败",
Toast.LENGTH_LONG).show();
tv_result.setText("");
}
}
}


通过gson.fromGson(result,Movie.class)这句代码,一下子实现了我们我们想要的反序列化,怎一个爽字了得!然后如果要得到javabean的详细属性值,那么直接调用自动生成的bean实体就阔以了,这种解析方式我特别着迷,解析不费劲。

好了,12306火车票查询Demo的效果图:



源码地址:http://download.csdn.net/detail/zhangxing52077/9651693,好了,我是张星,咱们准时再约!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Gson解析 Gson fromJson