新手入门,和风天气预报免费API接口用GSON工具实现数据解析

来源:互联网 发布:唐筛检查结果数据分析 编辑:程序博客网 时间:2024/05/21 10:14

作为一个入门不久的安卓小菜鸟,正在做一个个人项目。于是就想要做一个有关天气的APP,所以到网上找一些免费的接口来获得一些天气的数据,找来找去,最后选中了百度API里面的一个叫和风天气预报的接口,如下图,点击打开链接


  没有预料到的是,我进了一个大大的坑中。和风天气返回的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(){@Overridepublic void onSuccess(int status, String responseString) {Log.d("hap.zhu", "success status="+status+",responseString="+responseString);StringBuilder sb=new StringBuilder(responseString);//处理字符串,删去两个空格与3.0sb.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成功解析,将数据变为一个个对象值

下面是我一整天的劳动成果,实体类一览图


当然名字是我用中式英语取的,大家可以自行取名,只要里面的属性名不变就行啦~~下载链接如右,实体类下载链接,希望大家可以体谅下我的吐血之作,赏赐我一点积分,谢谢大家啦,当然也可以自己去网上在线生成实体类,看个人喜好啦~~~

0 0
原创粉丝点击