复杂的json的解析(以和天气的json为例)
2016-05-27 10:44
495 查看
和天气的接口返回的json如下,我是费了九牛二虎之力才弄明白怎么解析
{"HeWeather data service 3.0":[{"aqi":{"city":{"aqi":"89","co":"1","no2":"83","o3":"38","pm10":"87","pm25":"89","qlty":"良","so2":"7"}},"basic":{"city":"北京","cnty":"中国","id":"CN101010100","lat":"39.904000","lon":"116.391000","update":{"loc":"2016-05-27 09:51","utc":"2016-05-27
01:51"}},"daily_forecast":[{"astro":{"sr":"04:50","ss":"19:33"},"cond":{"code_d":"100","code_n":"100","txt_d":"晴","txt_n":"晴"},"date":"2016-05-27","hum":"14","pcpn":"0.0","pop":"0","pres":"1008","tmp":{"max":"31","min":"18"},"vis":"10","wind":{"deg":"199","dir":"南风","sc":"3-4","spd":"14"}},{"astro":{"sr":"04:49","ss":"19:33"},"cond":{"code_d":"101","code_n":"100","txt_d":"多云","txt_n":"晴"},"date":"2016-05-28","hum":"15","pcpn":"0.0","pop":"0","pres":"1004","tmp":{"max":"30","min":"18"},"vis":"10","wind":{"deg":"197","dir":"无持续风向","sc":"微风","spd":"0"}},{"astro":{"sr":"04:49","ss":"19:34"},"cond":{"code_d":"100","code_n":"101","txt_d":"晴","txt_n":"多云"},"date":"2016-05-29","hum":"8","pcpn":"0.0","pop":"0","pres":"1007","tmp":{"max":"31","min":"17"},"vis":"10","wind":{"deg":"349","dir":"北风","sc":"3-4","spd":"10"}},{"astro":{"sr":"04:48","ss":"19:35"},"cond":{"code_d":"101","code_n":"104","txt_d":"多云","txt_n":"阴"},"date":"2016-05-30","hum":"16","pcpn":"0.3","pop":"37","pres":"1001","tmp":{"max":"31","min":"21"},"vis":"10","wind":{"deg":"220","dir":"无持续风向","sc":"微风","spd":"0"}},{"astro":{"sr":"04:48","ss":"19:36"},"cond":{"code_d":"101","code_n":"100","txt_d":"多云","txt_n":"晴"},"date":"2016-05-31","hum":"13","pcpn":"0.0","pop":"0","pres":"1008","tmp":{"max":"30","min":"18"},"vis":"10","wind":{"deg":"58","dir":"无持续风向","sc":"微风","spd":"9"}},{"astro":{"sr":"04:47","ss":"19:36"},"cond":{"code_d":"100","code_n":"101","txt_d":"晴","txt_n":"多云"},"date":"2016-06-01","hum":"11","pcpn":"0.0","pop":"12","pres":"1011","tmp":{"max":"31","min":"20"},"vis":"10","wind":{"deg":"6","dir":"无持续风向","sc":"微风","spd":"10"}},{"astro":{"sr":"04:47","ss":"19:37"},"cond":{"code_d":"101","code_n":"104","txt_d":"多云","txt_n":"阴"},"date":"2016-06-02","hum":"8","pcpn":"0.0","pop":"6","pres":"1005","tmp":{"max":"28","min":"19"},"vis":"10","wind":{"deg":"196","dir":"无持续风向","sc":"微风","spd":"9"}}],"hourly_forecast":[{"date":"2016-05-27
10:00","hum":"19","pop":"0","pres":"1011","tmp":"29","wind":{"deg":"197","dir":"西南风","sc":"微风","spd":"13"}},{"date":"2016-05-27 13:00","hum":"15","pop":"0","pres":"1009","tmp":"32","wind":{"deg":"199","dir":"西南风","sc":"3-4","spd":"20"}},{"date":"2016-05-27
16:00","hum":"14","pop":"0","pres":"1007","tmp":"32","wind":{"deg":"198","dir":"西南风","sc":"3-4","spd":"22"}},{"date":"2016-05-27 19:00","hum":"19","pop":"0","pres":"1007","tmp":"29","wind":{"deg":"200","dir":"西南风","sc":"3-4","spd":"17"}},{"date":"2016-05-27
22:00","hum":"30","pop":"0","pres":"1008","tmp":"26","wind":{"deg":"213","dir":"西南风","sc":"微风","spd":"16"}}],"now":{"cond":{"code":"100","txt":"晴"},"fl":"25","hum":"31","pcpn":"0","pres":"1011","tmp":"26","vis":"10","wind":{"deg":"140","dir":"南风","sc":"3-4","spd":"11"}},"status":"ok","suggestion":{"comf":{"brf":"较不舒适","txt":"白天天气晴好,明媚的阳光在给您带来好心情的同时,也会使您感到有些热,不很舒适。"},"cw":{"brf":"较适宜","txt":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"},"drsg":{"brf":"热","txt":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"},"flu":{"brf":"少发","txt":"各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"},"sport":{"brf":"较适宜","txt":"天气较好,但风力较大,推荐您进行室内运动,若在户外运动请注意防风。"},"trav":{"brf":"适宜","txt":"天气较好,是个好天气哦。稍热但是风大,能缓解炎热的感觉,适宜旅游,可不要错过机会呦!"},"uv":{"brf":"很强","txt":"紫外线辐射极强,建议涂擦SPF20以上、PA++的防晒护肤品,尽量避免暴露于日光下。"}}}]}
首先需要引入import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
JSONArray aa = (JSONArray) jsStr.get("HeWeather data service 3.0");
JSONObject json = aa.getJSONObject(0);
JSONObject aqi = json.getJSONObject("aqi");
JSONObject city = aqi.getJSONObject("city");
String Taqi = city.getString("aqi");
String pm25 = city.getString("pm25");
//String Tqlty = city.getString("qlty")==null?"良":city.getString("qlty");
int taqi = Integer.parseInt(Taqi);
String Tqlty;
if(0<taqi&&taqi<60){
Tqlty = "优";
}else if(60<taqi&&taqi<100){
Tqlty = "良";
}else if(100<taqi&&taqi<150){
Tqlty = "轻度污染";
}else if(150<taqi&&taqi<200){
Tqlty = "中度污染";
}else{
Tqlty = "重度污染";
}
JSONObject basic = json.getJSONObject("basic");
String mcity = basic.getString("city");
JSONObject now = json.getJSONObject("now");
JSONArray daily = json.getJSONArray("daily_forecast");
//今天天气
JSONObject todayCityObject = daily.getJSONObject(0);
JSONObject todayTemp = todayCityObject.getJSONObject("tmp");
JSONObject todayCond = todayCityObject.getJSONObject("cond");
JSONObject todayWind = todayCityObject.getJSONObject("wind");
String Tdir = todayWind.getString("dir");
String Tsc = todayWind.getString("sc");
String todayMaxTem = todayTemp.getString("max");
String todayMinTem = todayTemp.getString("min");
String Tday = todayCond.getString("txt_d");
String Tnight = todayCond.getString("txt_n");
//七天天气情况
List<Object> list = new ArrayList<Object>();
for(int i=0;i<daily.size();i++){
JSONObject cityObject = daily.getJSONObject(i);
JSONObject Temp = cityObject.getJSONObject("tmp");
JSONObject Cond = cityObject.getJSONObject("cond");
JSONObject Wind = cityObject.getJSONObject("wind");
String date = cityObject.getString("date");
String dir = Wind.getString("dir");
String sc = Wind.getString("sc");
String MaxTem = Temp.getString("max");
String MinTem = Temp.getString("min");
String day = Cond.getString("txt_d");
String night = Cond.getString("txt_n");
Map<String, String> map = new HashMap<String, String>();
map.put("date", date);
map.put("minTem", MinTem);
map.put("MaxTem", MaxTem);
map.put("day", day);
map.put("night", night);
map.put("dir", dir);
map.put("sc", sc);
list.add(i, map);
}
JSONArray hourly = json.getJSONArray("hourly_forecast");
JSONObject hourlyObject = daily.getJSONObject(0);
//JSONObject astro = cityObject.getJSONObject("astro");
//String mr = astro.getString("mr");
//String status = json.getString("status");
JSONObject suggesstion = json.getJSONObject("suggestion");
一个{}是一个JsonObject,而一个[]是一个JsonArray
{"HeWeather data service 3.0":[{"aqi":{"city":{"aqi":"89","co":"1","no2":"83","o3":"38","pm10":"87","pm25":"89","qlty":"良","so2":"7"}},"basic":{"city":"北京","cnty":"中国","id":"CN101010100","lat":"39.904000","lon":"116.391000","update":{"loc":"2016-05-27 09:51","utc":"2016-05-27
01:51"}},"daily_forecast":[{"astro":{"sr":"04:50","ss":"19:33"},"cond":{"code_d":"100","code_n":"100","txt_d":"晴","txt_n":"晴"},"date":"2016-05-27","hum":"14","pcpn":"0.0","pop":"0","pres":"1008","tmp":{"max":"31","min":"18"},"vis":"10","wind":{"deg":"199","dir":"南风","sc":"3-4","spd":"14"}},{"astro":{"sr":"04:49","ss":"19:33"},"cond":{"code_d":"101","code_n":"100","txt_d":"多云","txt_n":"晴"},"date":"2016-05-28","hum":"15","pcpn":"0.0","pop":"0","pres":"1004","tmp":{"max":"30","min":"18"},"vis":"10","wind":{"deg":"197","dir":"无持续风向","sc":"微风","spd":"0"}},{"astro":{"sr":"04:49","ss":"19:34"},"cond":{"code_d":"100","code_n":"101","txt_d":"晴","txt_n":"多云"},"date":"2016-05-29","hum":"8","pcpn":"0.0","pop":"0","pres":"1007","tmp":{"max":"31","min":"17"},"vis":"10","wind":{"deg":"349","dir":"北风","sc":"3-4","spd":"10"}},{"astro":{"sr":"04:48","ss":"19:35"},"cond":{"code_d":"101","code_n":"104","txt_d":"多云","txt_n":"阴"},"date":"2016-05-30","hum":"16","pcpn":"0.3","pop":"37","pres":"1001","tmp":{"max":"31","min":"21"},"vis":"10","wind":{"deg":"220","dir":"无持续风向","sc":"微风","spd":"0"}},{"astro":{"sr":"04:48","ss":"19:36"},"cond":{"code_d":"101","code_n":"100","txt_d":"多云","txt_n":"晴"},"date":"2016-05-31","hum":"13","pcpn":"0.0","pop":"0","pres":"1008","tmp":{"max":"30","min":"18"},"vis":"10","wind":{"deg":"58","dir":"无持续风向","sc":"微风","spd":"9"}},{"astro":{"sr":"04:47","ss":"19:36"},"cond":{"code_d":"100","code_n":"101","txt_d":"晴","txt_n":"多云"},"date":"2016-06-01","hum":"11","pcpn":"0.0","pop":"12","pres":"1011","tmp":{"max":"31","min":"20"},"vis":"10","wind":{"deg":"6","dir":"无持续风向","sc":"微风","spd":"10"}},{"astro":{"sr":"04:47","ss":"19:37"},"cond":{"code_d":"101","code_n":"104","txt_d":"多云","txt_n":"阴"},"date":"2016-06-02","hum":"8","pcpn":"0.0","pop":"6","pres":"1005","tmp":{"max":"28","min":"19"},"vis":"10","wind":{"deg":"196","dir":"无持续风向","sc":"微风","spd":"9"}}],"hourly_forecast":[{"date":"2016-05-27
10:00","hum":"19","pop":"0","pres":"1011","tmp":"29","wind":{"deg":"197","dir":"西南风","sc":"微风","spd":"13"}},{"date":"2016-05-27 13:00","hum":"15","pop":"0","pres":"1009","tmp":"32","wind":{"deg":"199","dir":"西南风","sc":"3-4","spd":"20"}},{"date":"2016-05-27
16:00","hum":"14","pop":"0","pres":"1007","tmp":"32","wind":{"deg":"198","dir":"西南风","sc":"3-4","spd":"22"}},{"date":"2016-05-27 19:00","hum":"19","pop":"0","pres":"1007","tmp":"29","wind":{"deg":"200","dir":"西南风","sc":"3-4","spd":"17"}},{"date":"2016-05-27
22:00","hum":"30","pop":"0","pres":"1008","tmp":"26","wind":{"deg":"213","dir":"西南风","sc":"微风","spd":"16"}}],"now":{"cond":{"code":"100","txt":"晴"},"fl":"25","hum":"31","pcpn":"0","pres":"1011","tmp":"26","vis":"10","wind":{"deg":"140","dir":"南风","sc":"3-4","spd":"11"}},"status":"ok","suggestion":{"comf":{"brf":"较不舒适","txt":"白天天气晴好,明媚的阳光在给您带来好心情的同时,也会使您感到有些热,不很舒适。"},"cw":{"brf":"较适宜","txt":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"},"drsg":{"brf":"热","txt":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"},"flu":{"brf":"少发","txt":"各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"},"sport":{"brf":"较适宜","txt":"天气较好,但风力较大,推荐您进行室内运动,若在户外运动请注意防风。"},"trav":{"brf":"适宜","txt":"天气较好,是个好天气哦。稍热但是风大,能缓解炎热的感觉,适宜旅游,可不要错过机会呦!"},"uv":{"brf":"很强","txt":"紫外线辐射极强,建议涂擦SPF20以上、PA++的防晒护肤品,尽量避免暴露于日光下。"}}}]}
首先需要引入import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
JSONArray aa = (JSONArray) jsStr.get("HeWeather data service 3.0");
JSONObject json = aa.getJSONObject(0);
JSONObject aqi = json.getJSONObject("aqi");
JSONObject city = aqi.getJSONObject("city");
String Taqi = city.getString("aqi");
String pm25 = city.getString("pm25");
//String Tqlty = city.getString("qlty")==null?"良":city.getString("qlty");
int taqi = Integer.parseInt(Taqi);
String Tqlty;
if(0<taqi&&taqi<60){
Tqlty = "优";
}else if(60<taqi&&taqi<100){
Tqlty = "良";
}else if(100<taqi&&taqi<150){
Tqlty = "轻度污染";
}else if(150<taqi&&taqi<200){
Tqlty = "中度污染";
}else{
Tqlty = "重度污染";
}
JSONObject basic = json.getJSONObject("basic");
String mcity = basic.getString("city");
JSONObject now = json.getJSONObject("now");
JSONArray daily = json.getJSONArray("daily_forecast");
//今天天气
JSONObject todayCityObject = daily.getJSONObject(0);
JSONObject todayTemp = todayCityObject.getJSONObject("tmp");
JSONObject todayCond = todayCityObject.getJSONObject("cond");
JSONObject todayWind = todayCityObject.getJSONObject("wind");
String Tdir = todayWind.getString("dir");
String Tsc = todayWind.getString("sc");
String todayMaxTem = todayTemp.getString("max");
String todayMinTem = todayTemp.getString("min");
String Tday = todayCond.getString("txt_d");
String Tnight = todayCond.getString("txt_n");
//七天天气情况
List<Object> list = new ArrayList<Object>();
for(int i=0;i<daily.size();i++){
JSONObject cityObject = daily.getJSONObject(i);
JSONObject Temp = cityObject.getJSONObject("tmp");
JSONObject Cond = cityObject.getJSONObject("cond");
JSONObject Wind = cityObject.getJSONObject("wind");
String date = cityObject.getString("date");
String dir = Wind.getString("dir");
String sc = Wind.getString("sc");
String MaxTem = Temp.getString("max");
String MinTem = Temp.getString("min");
String day = Cond.getString("txt_d");
String night = Cond.getString("txt_n");
Map<String, String> map = new HashMap<String, String>();
map.put("date", date);
map.put("minTem", MinTem);
map.put("MaxTem", MaxTem);
map.put("day", day);
map.put("night", night);
map.put("dir", dir);
map.put("sc", sc);
list.add(i, map);
}
JSONArray hourly = json.getJSONArray("hourly_forecast");
JSONObject hourlyObject = daily.getJSONObject(0);
//JSONObject astro = cityObject.getJSONObject("astro");
//String mr = astro.getString("mr");
//String status = json.getString("status");
JSONObject suggesstion = json.getJSONObject("suggestion");
一个{}是一个JsonObject,而一个[]是一个JsonArray
相关文章推荐
- js 获取当前时间操作
- JavaScript对象之原型
- js 扒一扒这些题目都考了哪些知识点
- 滚动栏改进,table切换,使广告随滚动条滚动
- 2016年5月27日上午(妙味课堂js基础-3笔记一(事件))
- js基础总结
- json解析二维对象
- js控制input输入的内容
- 读取本地json数据
- .Net深入实战系列—JSON序列化那点事儿
- 便签5-js延时器定时器
- js window.event 兼容浏览器问题
- JS集成fckeditor及判断内容是否为空的方法
- js getBoundingClientRect
- js获取项目根路径
- 原生js实现简单的展开收缩
- js实现div模拟模态对话框展现URL内容
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
- 基于JS实现密码框(password)中显示文字提示功能代码
- SSM框架下,Jsp页面提交请求及action获取值得问题