新手入门,和风天气预报免费API接口用GSON工具实现数据解析
2016-08-27 23:58
926 查看
作为一个入门不久的安卓小菜鸟,正在做一个个人项目。于是就想要做一个有关天气的APP,所以到网上找一些免费的接口来获得一些天气的数据,找来找去,最后选中了百度API里面的一个叫和风天气预报的接口,如下图,点击打开链接
没有预料到的是,我进了一个大大的坑中。和风天气返回的JSON字符串大概是这样的。
由于我用的是GSON解析,因为这工具简单易用,要真的按照JSON工具类解析,那得累死啊。不过这个GSON工具最麻烦的就是要创建实体类啦,
这个实体类的里面的属性是有要求的,就是必须跟返回JSON字符串里的key(属性),一一对应。
比如说第一个属性aqi,aqi里面又有一个属性city,city里面才是我们要的值。那就必须得先创建一个类,类名随便取,里面只有一个属性,属性名必须得是city,而且这个city属于另一个类,这个类里面放的就是city的具体属性啦,像pm25,co等等的啦。然后给这个city属性加上get和set方法,全参与无参构造方法(此处我也不明白,反正是惯例了,大家有兴趣可以搜索一下)。
创建实体类就是体力活啦,要花很多的时间啦,当然这些都不是重点,最最最让人吐血的是,第一个字头,
studio中的一个插件。这简单是神器啊,可以自动创建实体类,那我还花这么大力气创建一整天的实体类。还有就是网上也有许多在线解析JSON生成实体类的网站,实在没有必要这么累去一个个创建实体类,当初真是的too young too simple。
我发现自己的脑筋不会转变了,既然JSON字符串不符合规范那么处理一下不就行了吗,当时真的犯二了,JSON字符串本质上还是一个字符串,有这么多处理字符串的方法。
有时候真的是,稍微变通一下难题就会迎刃而解,当然解决了问题还是很让人愉快的,下面是我的代码。
返回的天气数据原始值
处理HeWeather头字符值后数据值
用GSON成功解析,将数据变为一个个对象值
下面是我一整天的劳动成果,实体类一览图
当然名字是我用中式英语取的,大家可以自行取名,只要里面的属性名不变就行啦~~下载链接如右,实体类下载链接,希望大家可以体谅下我的吐血之作,赏赐我一点积分,谢谢大家啦,当然也可以自己去网上在线生成实体类,看个人喜好啦~~~
没有预料到的是,我进了一个大大的坑中。和风天气返回的JSON字符串大概是这样的。
{ "HeWeather data service 3.0": [ { "aqi": { "city": { "aqi": "43", "co": "1", "no2": "31", "o3": "43", "pm10": "39", "pm25": "30", "qlty": "优", "so2": "9" } }, "basic": { "city": "广州", "cnty": "中国", "id": "CN101280101", "lat": "23.108000", "lon": "113.265000", "update": { "loc": "2016-08-27 22:52", "utc": "2016-08-27 14:52" } }, "daily_forecast": [ { "astro": { "sr": "06:07", "ss": "18:49" },没错,这一个JSON字符串非常的复杂,里面有对象,有数组,对象里面又嵌入了对象,数组就更不用说了,里面又有对象,又有普通的字段。
由于我用的是GSON解析,因为这工具简单易用,要真的按照JSON工具类解析,那得累死啊。不过这个GSON工具最麻烦的就是要创建实体类啦,
这个实体类的里面的属性是有要求的,就是必须跟返回JSON字符串里的key(属性),一一对应。
比如说第一个属性aqi,aqi里面又有一个属性city,city里面才是我们要的值。那就必须得先创建一个类,类名随便取,里面只有一个属性,属性名必须得是city,而且这个city属于另一个类,这个类里面放的就是city的具体属性啦,像pm25,co等等的啦。然后给这个city属性加上get和set方法,全参与无参构造方法(此处我也不明白,反正是惯例了,大家有兴趣可以搜索一下)。
创建实体类就是体力活啦,要花很多的时间啦,当然这些都不是重点,最最最让人吐血的是,第一个字头,
<strong><span style="font-size:18px;color:#ff0000;"> "HeWeather data service 3.0"</span></strong>这个属性是个什么鬼,中间带有两个空格,和一个点,这些都不能当做属性名啊,但是要用GSON解析的话,必须得生成属性名与JSON字符属性名一样的才行啊。这里真的卡住了我,然后我就去网上搜,发现解决方法原来这么简单,要多谢这位大神了,详情请点击大神的文章~~大神文章链接,在大神文章里面发现了一个不得了的东西,叫GSONFORMAT的工具,这是在Android
studio中的一个插件。这简单是神器啊,可以自动创建实体类,那我还花这么大力气创建一整天的实体类。还有就是网上也有许多在线解析JSON生成实体类的网站,实在没有必要这么累去一个个创建实体类,当初真是的too young too simple。
我发现自己的脑筋不会转变了,既然JSON字符串不符合规范那么处理一下不就行了吗,当时真的犯二了,JSON字符串本质上还是一个字符串,有这么多处理字符串的方法。
有时候真的是,稍微变通一下难题就会迎刃而解,当然解决了问题还是很让人愉快的,下面是我的代码。
String url="http://apis.baidu.com/heweather/weather/free"; ApiStoreSDK.execute(url, ApiStoreSDK.GET, para, new ApiCallBack(){ @Override public void onSuccess(int status, String responseString) { Log.d("hap.zhu", "success status="+status+",responseString="+responseString); StringBuilder sb=new StringBuilder(responseString); //处理字符串,删去两个空格与3.0 sb.deleteCharAt(11); sb.deleteCharAt(15); sb.delete(22, 26); String result=sb.toString(); Log.d("hap.zhu", "success status="+status+",responseString="+result); //利用GSON工具解析 Gson gson=new Gson(); QueryResultForWeatherFirst weatherResult=gson.fromJson(result, QueryResultForWeatherFirst.class); Log.d("hap.zhu", "weatherResult="+weatherResult); }Log显示的结果如下
返回的天气数据原始值
处理HeWeather头字符值后数据值
用GSON成功解析,将数据变为一个个对象值
下面是我一整天的劳动成果,实体类一览图
当然名字是我用中式英语取的,大家可以自行取名,只要里面的属性名不变就行啦~~下载链接如右,实体类下载链接,希望大家可以体谅下我的吐血之作,赏赐我一点积分,谢谢大家啦,当然也可以自己去网上在线生成实体类,看个人喜好啦~~~
相关文章推荐
- 通过servlet从气象局接口获取到天气预报的json数据,并解析得到的json数据存入数据库(案例)
- 免费的api数据接口-股票查询api
- 快递单号跟踪借口 API免费接口 各种提供JSON格式数据返回服务网站的API接口
- 解析接口中的json串网络图片数据,实现效果为无限轮播图+小圆点
- Intent传递数据 对于GsonFormat生成的数据需要将里面的所有内部类实现序列化接口才可打包过去
- 使用json解析国家气象局(天气预报)接口数据
- JSON API免费接口 各种提供JSON格式数据返回服务网站的API接口
- Gson搭配TypeToken实现复杂数据的解析
- 免费API数据接口
- 天气预报的免费接口api
- Google日历中可以导入外部的ical数据实现免费发送天气预报
- XMLObject 简易xml格式接口数据生成和解析工具
- 免费的天气预报API接口--谷歌,雅虎,中央气象台
- 利用百度车联网提供的天气查询接口用python查询天气信息以及安卓(Java)利用gson解析数据
- 解析JSON数据的详细步骤以及偷懒技巧(使用第三方库GSON以及GsonFormat工具)
- API数据接口_免费数据调用接口-聚合数据
- asMapper 数据解析工具总算完成了第一步,能实现vo和xml和相互转换
- Android中重要数据解析JSON工具之gson库的使用
- 我知道的几个免费的API数据接口
- 分享第三方免费API接口数据