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/96516622.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,好了,我是张星,咱们准时再约!
相关文章推荐
- android 解析json数据格式
- 在 Android 应用程序中使用 Internet 数据 解析 XML、JSON 和 protocol buffers 数据
- android---Json数据解析
- android 解析json数据格式
- Android Json 数据解析
- Android Json 数据解析 II 之 ------xml ,json 两种数据格式之对比
- 【Android应用开发】-(17)获取Google天气预报通过Xml和JSON解析数据
- android 解析json数据格式
- Android学习之JSON数据解析
- Android学习之JSON数据解析
- Android学习之JSON数据解析
- Android学习之JSON数据解析
- android 解析json数据格式
- android 解析json数据格式
- Android学习系列(20)--App数据格式之解析Json
- android 解析json数据格式
- android 解析json数据格式
- android 解析json数据格式
- android中解析服务器发过来的JSON数据
- Android中使用Gson解析JSON数据