安卓json解析——12306查询票价的字符串解析
来源:互联网 发布:认知心理学 知乎 编辑:程序博客网 时间:2024/05/01 15:48
突然看到群里有2个同学都在问关于json数据解析的问题,当然很多人用工具解析,都忘记是怎么解析,那我就先贴一下原始数据吧:
{"reason":"查询成功","result":{"list":[{"train_no":"K599","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"05:14","end_time":"15:50","run_time":"10小时36分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"G529","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"07:26","end_time":"11:27","run_time":"4小时1分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"K21","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"08:06","end_time":"19:48","run_time":"11小时42分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"K471","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"08:45","end_time":"19:13","run_time":"10小时28分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"K967","train_type":"","start_station":"北京","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"08:45","end_time":"20:12","run_time":"11小时27分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"G421","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"09:07","end_time":"12:58","run_time":"3小时51分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"G511","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"09:27","end_time":"13:29","run_time":"4小时2分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"特等座","price":"711.0"}]},{"train_no":"K279","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"09:52","end_time":"21:08","run_time":"11小时16分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"G557","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"11:07","end_time":"15:03","run_time":"3小时56分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"G67","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"12:13","end_time":"16:31","run_time":"4小时18分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"T145","train_type":"","start_station":"北京","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"12:38","end_time":"21:36","run_time":"8小时58分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"T167","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"14:16","end_time":"22:54","run_time":"8小时38分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"G503","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"14:38","end_time":"18:18","run_time":"3小时40分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"G587","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"14:55","end_time":"19:09","run_time":"4小时14分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"T49","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"15:11","end_time":"00:47","run_time":"9小时36分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"G521","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"15:23","end_time":"19:36","run_time":"4小时13分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"G585","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"16:23","end_time":"20:41","run_time":"4小时18分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"G523","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河西","end_station_type":"过","start_time":"16:30","end_time":"20:21","run_time":"3小时51分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"G525","train_type":"","start_station":"北京西","start_station_type":"始","end_station":"漯河西","end_station_type":"过","start_time":"17:14","end_time":"21:16","run_time":"4小时2分","price_list":[{"price_type":"二等座","price":"373.0"},{"price_type":"一等座","price":"597.0"},{"price_type":"商务座","price":"1179.0"}]},{"train_no":"K261","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"17:18","end_time":"04:13","run_time":"10小时55分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"K401","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"19:36","end_time":"06:35","run_time":"10小时59分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"无座","price":"112.0"}]},{"train_no":"T289","train_type":"","start_station":"北京西","start_station_type":"过","end_station":"漯河","end_station_type":"过","start_time":"22:08","end_time":"06:20","run_time":"8小时12分","price_list":[{"price_type":"硬座","price":"112.0"},{"price_type":"硬卧","price":"219.0"},{"price_type":"软卧","price":"339.0"},{"price_type":"高级软卧","price":"715.0"},{"price_type":"无座","price":"112.0"}]}]},"error_code":0}
一、先将数据解析格式化
二、 创建数据对象
/** * 数组对象中每一元素对应的数据 * end_station : 漯河 * end_station_type : 过 * end_time : 06:20 * run_time : 8小时12分 * start_station : 北京西 * start_station_type : 过 * start_time : 22:08 * train_no : T289 * train_type : */ private class Province{ private String end_station; private String end_station_type; private String end_time; private String run_time; private String start_station; private String start_station_type; private String start_time; private String train_no; private String train_type; private List<PriceListBean> price_list; //get(),set()就不贴出来了 }
/** * "price": "112.0", * "price_type": "无座" */ public class PriceListBean { private String price; private String price_type; }
三、开始解析
/** * 12306查询票价的字符串 * * @param shuju 原始字符串数据 */ public List<Province> parseResult(@NonNull JSONObject shuju) { List<Province> provinces; JSONObject resultObject = shuju.optJSONObject("result");//获取到result这层数据 JSONArray listJsonArray = resultObject.optJSONArray("list");// 获取到list这层数据 //校验数据的合法性:为了防止坑爹的后台哥们 if (listJsonArray == null || listJsonArray.length() == 0) { return null; } provinces = new ArrayList<>(); for (int x = 0; x < listJsonArray.length(); x++) { JSONObject object = listJsonArray.optJSONObject(x); //校验单个数据,只是退出当前循环 if (object == null) { continue; } Province province = new Province(); province.setEnd_station(object.optString("end_station")); province.setEnd_station_type(object.optString("end_station_type")); province.setEnd_time(object.optString("end_time")); province.setRun_time(object.optString("run_time")); province.setStart_station(object.optString("start_station")); province.setStart_station_type(object.optString("start_station_type")); province.setStart_time(object.optString("start_time")); province.setTrain_no(object.optString("train_no")); province.setTrain_type(object.optString("train_type")); //解析票价数组对象 JSONArray price_list = object.optJSONArray("price_list"); List<PriceListBean> price = getPrice(price_list); province.setPrice_list(price); provinces.add(province); } return provinces; } /** * 解析票价 * * @param jsonArray JSONArray数据对象 * @return List<PriceListBean> 价格集合 */ private List<PriceListBean> getPrice(@NonNull JSONArray jsonArray) { if (jsonArray.length() == 0) { return null; } List<PriceListBean> list = new ArrayList<>(); for (int x = 0; x < jsonArray.length(); x++) { JSONObject object = jsonArray.optJSONObject(x); //校验单个数据,只是退出当前循环 if (object == null) { continue; } PriceListBean bean = new PriceListBean(); bean.setPrice(object.optString("price")); bean.setPrice_type(object.optString("price_type")); list.add(bean); } return list; }
注意:解析过程中用的是optString():这个方法的好处是就算数据为空,会自动添加默认数据,更不需要抛异常
- 安卓json解析——12306查询票价的字符串解析
- 安卓json的解析
- 安卓Json解析
- 安卓Json解析
- 【安卓笔记】对json的解析
- 安卓Json数据的解析
- 查询字符串的解析—QueryParser类
- 安卓客户端解析json
- 安卓Json解析详解
- 安卓中的JSON解析
- 安卓json数据解析
- Java实现自己的Json解析器——Json字符串解析原理
- 安卓新手学习笔记 ——XML解析与JSON解析
- 安卓对数据的解析,对xml文件解析,以及对json的解析
- JSON字符串——后台解析系列
- 安卓Gson对json数据的解析
- 浅淡安卓json的三种解析
- luncene 查询字符串的解析—QueryParser类
- 第一次作业
- java中switch的case可以写两个参数吗比如case 3||4
- 流
- 除法逆元(ZS and The Birthday Paradox,cf 711E)
- CSU 1716 Morse
- 安卓json解析——12306查询票价的字符串解析
- OPENGL入门
- 0/1背包变化
- Cocos2d-x的设计模式
- spoj spoj839 Optimal Marks 网络流 最小割 附数据生成器
- Volley的四大请求
- binder连接池
- 解决Eclipse中文乱码
- 正则判断正整数等js如何判断输入是否为正整数、浮点数等数字的函数