Java调用天气接口(百度天气)解析返回的JSON数据

简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据。



通过百度天气API调用网络编程接口接收返回的JSON格式的数据。

关于百度天气接口的详细说明可以参考文章:   http://www.cnblogs.com/txw1958/p/baidu-weather-forecast-api.html


使用百度提供的天气接口,也就是通过一个URL访问百度天气服务器,通过给URL可以取得包含天气信息的JSON格式的数据。

[java]  view plain   copy
  1. <pre name="code" class="java">import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.FileReader;  
  6. import java.io.FileWriter;  
  7. import java.io.IOException;  
  8. import java.io.InputStreamReader;  
  9. import java.io.UnsupportedEncodingException;  
  10. import java.net.MalformedURLException;  
  11. import java.net.URL;  
  12. import java.net.URLConnection;  
  13. import java.net.URLEncoder;  
  14. import java.nio.charset.Charset;  
  15. import java.util.Date;  
  16. import java.util.HashMap;  
  17. import java.util.Map;  
  18.   
  19.                 //根据城市获取天气信息的java代码  
  20.                 //cityName 是你要取得天气信息的城市的中文名字,如“北京”,“深圳”  
  21.         static String  getWeatherInform(String cityName){  
  22.           
  23.             //百度天气API  
  24.             String baiduUrl = "http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=W69oaDTCfuGwzNwmtVvgWfGH";  
  25.             StringBuffer strBuf;  
  26.       
  27.             try {                              
  28.                                 //通过浏览器直接访问http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ  
  29.                                 //5slgyqGDENN7Sy7pw29IUvrZ 是我自己申请的一个AK(许可码),如果访问不了,可以自己去申请一个新的ak  
  30.                                 //百度ak申请地址:http://lbsyun.baidu.com/apiconsole/key  
  31.                                 //要访问的地址URL,通过URLEncoder.encode()函数对于中文进行转码                              
  32.                 baiduUrl = "http://api.map.baidu.com/telematics/v3/weather?location="+URLEncoder.encode(cityName, "utf-8")+"&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ";                    
  33.             } catch (UnsupportedEncodingException e1) {               
  34.                 e1.printStackTrace();                     
  35.             }  
  36.   
  37.             strBuf = new StringBuffer();  
  38.                   
  39.             try{  
  40.                 URL url = new URL(baiduUrl);  
  41.                 URLConnection conn = url.openConnection();  
  42.                 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));//转码。  
  43.                 String line = null;  
  44.                 while ((line = reader.readLine()) != null)  
  45.                     strBuf.append(line + " ");  
  46.                     reader.close();  
  47.             }catch(MalformedURLException e) {  
  48.                 e.printStackTrace();   
  49.             }catch(IOException e){  
  50.                 e.printStackTrace();   
  51.             }     
  52.   
  53.             return strBuf.toString();  
  54.         }  


 

上面调用百度天气接口的函数返回的JSON格式的数据如下:

[plain]  view plain   copy
  1. {"error":0,"status":"success","date":"2014-08-27","results":[{"currentCity":"北京","pm25":"89","index":[{"title":"穿衣","zs":"炎热","tipt":"穿衣指数","des":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。"},{"title":"洗车","zs":"较适宜","tipt":"洗车指数","des":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"},{"title":"旅游","zs":"较适宜","tipt":"旅游指数","des":"天气较好,温度较高,天气较热,但有微风相伴,还是比较适宜旅游的,不过外出时要注意防暑防晒哦!"},{"title":"感冒","zs":"少发","tipt":"感冒指数","des":"各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"},{"title":"运动","zs":"较适宜","tipt":"运动指数","des":"天气较好,户外运动请注意防晒。推荐您进行室内运动。"},{"title":"紫外线强度","zs":"中等","tipt":"紫外线强度指数","des":"属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"}],"weather_data":[{"date":"周三 08月27日 (实时:29℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"多云","wind":"微风","temperature":"33 ~ 20℃"},{"date":"周四","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/leizhenyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/zhenyu.png","weather":"雷阵雨转阵雨","wind":"微风","temperature":"28 ~ 19℃"},{"date":"周五","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"多云","wind":"微风","temperature":"29 ~ 20℃"},{"date":"周六","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/yin.png","weather":"多云转阴","wind":"微风","temperature":"29 ~ 20℃"}]}]}  

现在需要对该JSON格式的数据进行解析。

上面返回的JSON格式的数据包含四天的天气信息。现在对JSON格式的数据进行解析。

[java]  view plain   copy
  1. //需要导入解析JSON格式数据的第三方包   请百度搜索并下载,导入“jsonlib.rar”包  
  2. import net.sf.json.JSONArray;  
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值