解析和风天气API的json(objective-C实现)
暑假在家闲着没事干,心血来潮想做个天气预报APP玩玩,听说和风天气API很好,于是注册并试了下,结果它的JSON是这样的(拿我的家乡武义为例子)
{"HeWeather data service 3.0":[{"aqi":{"city":{"aqi":"","pm10":"","pm25":"","qlty":"良"}},"basic":{"city":"武义","cnty":"中国","id":"CN101210906","lat":"28.530000","lon":"119.480000","update":{"loc":"2016-08-16 17:52","utc":"2016-08-16 09:52"}},"daily_forecast":[{"astro":{"sr":"05:32","ss":"18:40"},"cond":{"code_d":"","code_n":"","txt_d":"晴","txt_n":"多云"},"date":"2016-08-16","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"无持续风向","sc":"微风","spd":""}},{"astro":{"sr":"05:32","ss":"18:39"},"cond":{"code_d":"","code_n":"","txt_d":"晴","txt_n":"晴"},"date":"2016-08-17","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"东风","sc":"微风","spd":""}},{"astro":{"sr":"05:33","ss":"18:38"},"cond":{"code_d":"","code_n":"","txt_d":"晴","txt_n":"晴"},"date":"2016-08-18","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"东风","sc":"微风","spd":""}},{"astro":{"sr":"05:33","ss":"18:37"},"cond":{"code_d":"","code_n":"","txt_d":"多云","txt_n":"多云"},"date":"2016-08-19","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"东风","sc":"微风","spd":""}},{"astro":{"sr":"05:34","ss":"18:36"},"cond":{"code_d":"","code_n":"","txt_d":"多云","txt_n":"多云"},"date":"2016-08-20","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"东风","sc":"微风","spd":""}},{"astro":{"sr":"05:34","ss":"18:35"},"cond":{"code_d":"","code_n":"","txt_d":"多云","txt_n":"多云"},"date":"2016-08-21","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"东风","sc":"微风","spd":""}},{"astro":{"sr":"05:35","ss":"18:34"},"cond":{"code_d":"","code_n":"","txt_d":"多云","txt_n":"多云"},"date":"2016-08-22","hum":"","pcpn":"0.0","pop":"","pres":"","tmp":{"max":"","min":""},"vis":"","wind":{"deg":"","dir":"东风","sc":"微风","spd":""}}],"hourly_forecast":[{"date":"2016-08-16 19:00","hum":"","pop":"","pres":"","tmp":"","wind":{"deg":"","dir":"东南风","sc":"微风","spd":""}},{"date":"2016-08-16 22:00","hum":"","pop":"","pres":"","tmp":"","wind":{"deg":"","dir":"东南风","sc":"微风","spd":""}}],"now":{"cond":{"code":"","txt":"晴"},"fl":"","hum":"","pcpn":"","pres":"","tmp":"","vis":"","wind":{"deg":"","dir":"东风","sc":"4-5","spd":""}},"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++的防晒护肤品。避免在10点至14点暴露于日光下。"}}}]}
你赢了,我选择死亡
由于奇葩的格式连json解析工具也不能用,好吧我就不厌其烦地层层解析....
注意:{}代表NSDictionary,[]和()代表NSArray。也算是学到了一点
-(void)requestForApi:(NSDictionary*)jsonDict{//接收json中的api内容
NSDictionary *wyCity = [[jsonDict objectForKey:@"aqi"] objectForKey:@"city"];
NSString *wyAqiStr = [wyCity objectForKey:@"aqi"];
NSString *wyPm10 = [wyCity objectForKey:@"pm10"];
NSString *wyPm25 = [wyCity objectForKey:@"pm25"];
NSString *wyQlty = [wyCity objectForKey:@"qlty"];
}
-(void)requestForBasic:(NSDictionary*)jsonDict{
NSDictionary *wyBasic = [jsonDict objectForKey:@"basic"];
NSString *wyCity = [wyBasic objectForKey:@"city"];
NSString *wyCnty = [wyBasic objectForKey:@"cnty"];
NSString *wyId = [wyBasic objectForKey:@"id"];
NSString *wyLat = [wyBasic objectForKey:@"lat"];
NSString *wyLon = [wyBasic objectForKey:@"lon"];
NSDictionary *wyUpdate= [wyBasic objectForKey:@"update"];
[self requestForUpdate:wyUpdate];
}
-(void)requestForUpdate:(NSDictionary*)jsonUpdate{
NSString *wyLoc = [jsonUpdate objectForKey:@"loc"];
NSString *myUtc = [jsonUpdate objectForKey:@"utc"];
}
-(void)requestForAstro:(NSDictionary*)jsonAstro{
NSString *wySr = [jsonAstro objectForKey:@"sr"];
NSString *wySs = [jsonAstro objectForKey:@"ss"];
}
-(void)requestForCond:(NSDictionary*)jsonCond{
NSString *wyCodeD = [jsonCond objectForKey:@"code_d"];
NSString *wyCodeN = [jsonCond objectForKey:@"code_n"];
NSString *wyTxtD = [jsonCond objectForKey:@"txt_d"];
NSString *wyTxtN = [jsonCond objectForKey:@"txt_n"];
}
-(void)requestForNowCond:(NSDictionary*)jsonNowCond{
NSString *wyCode = [jsonNowCond objectForKey:@"code"];
NSString *wyTxt = [jsonNowCond objectForKey:@"txt"];
}
-(void)requestForTmp:(NSDictionary*)jsonTmp{
NSString *wyMax = [jsonTmp objectForKey:@"max"];
NSString *wyMin = [jsonTmp objectForKey:@"min"];
}
-(void)requestForWind:(NSDictionary*)jsonWind{
NSString *wyDeg = [jsonWind objectForKey:@"deg"];
NSString *wyDir = [jsonWind objectForKey:@"dir"];
NSString *wySc = [jsonWind objectForKey:@"sc"];
NSString *wySpd = [jsonWind objectForKey:@"spd"];
}
-(void)requestForNowWind:(NSDictionary*)jsonNowWind{
NSString *wyDeg = [jsonNowWind objectForKey:@"deg"];
NSString *wyDir = [jsonNowWind objectForKey:@"dir"];
NSString *wySc = [jsonNowWind objectForKey:@"sc"];
NSString *wySpd = [jsonNowWind objectForKey:@"spd"];
}
-(void)requestForHourlyWind:(NSDictionary*)jsonHourlyWind{
NSString *wyDeg = [jsonHourlyWind objectForKey:@"deg"];
NSString *wyDir = [jsonHourlyWind objectForKey:@"dir"];
NSString *wySc = [jsonHourlyWind objectForKey:@"sc"];
NSString *wySpd = [jsonHourlyWind objectForKey:@"spd"];
}
-(void)requestForDailyForecast:(NSDictionary*)jsonDailyForecast{
NSArray *wyDailyForecast = [jsonDailyForecast objectForKey:@"daily_forecast"];
NSDictionary *wyDay = [[NSDictionary alloc]init];
NSDictionary *wyAstro = [[NSDictionary alloc]init];
NSDictionary *wyCond = [[NSDictionary alloc]init];
NSString *wyDate = [[NSString alloc]init];
NSString *wyHum = [[NSString alloc]init];
NSString *wyPcpn = [[NSString alloc]init];
NSString *wyPop = [[NSString alloc]init];
NSString *wyPres = [[NSString alloc]init];
NSDictionary *wyTmp = [[NSDictionary alloc]init];
NSString *wyVis = [[NSString alloc]init];
NSDictionary *wyWind = [[NSDictionary alloc]init];
for(int day=;day<;day++){
wyDay = [wyDailyForecast objectAtIndex:day];
wyAstro = [wyDay objectForKey:@"astro"];
[self requestForAstro:wyAstro];
wyCond = [wyDay objectForKey:@"cond"];
[self requestForCond:wyCond];
wyDate = [wyDay objectForKey:@"date"];
wyHum = [wyDay objectForKey:@"hum"];
wyPcpn = [wyDay objectForKey:@"pcpn"];
wyPop = [wyDay objectForKey:@"pop"];
wyPres = [wyDay objectForKey:@"pres"];
wyTmp = [wyDay objectForKey:@"tmp"];
[self requestForTmp:wyTmp];
wyVis = [wyDay objectForKey:@"vis"];
wyWind = [wyDay objectForKey:@"wind"];
[self requestForWind:wyWind];
}
}
-(void)requestForHourlyForecast:(NSDictionary*)jsonHourlyForecast{
NSArray *wyHourlyForecast = [jsonHourlyForecast objectForKey:@"hourly_forecast"];
NSDictionary *wyDay = [[NSDictionary alloc]init];
NSString *wyDate = [[NSString alloc]init];
NSString *wyHum = [[NSString alloc]init];
NSString *wyPop = [[NSString alloc]init];
NSString *wyPres = [[NSString alloc]init];
NSString *wyTmp = [[NSString alloc]init];
NSDictionary *wyWind = [[NSDictionary alloc]init];
NSDate *currentDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH"];
NSString *dateString = [dateFormatter stringFromDate:currentDate];
int nowTime=;
if([dateString intValue]<) nowTime=;
else if([dateString intValue]<) nowTime=;
else if([dateString intValue]<) nowTime=;
else if([dateString intValue]<) nowTime=;
else if([dateString intValue]<) nowTime=;
for(int day=;day<nowTime;day++){
wyDay = [wyHourlyForecast objectAtIndex:day];
wyDate = [wyDay objectForKey:@"date"];
wyHum = [wyDay objectForKey:@"hum"];
wyPop = [wyDay objectForKey:@"pop"];
wyPres = [wyDay objectForKey:@"pres"];
wyTmp = [wyDay objectForKey:@"tmp"];
wyWind = [wyDay objectForKey:@"wind"];
[self requestForHourlyWind:wyWind];
}
}
-(void)requestForNow:(NSDictionary*)jsonNow{
NSDictionary *wyNow = [jsonNow objectForKey:@"now"];
NSDictionary *wyCond = [wyNow objectForKey:@"cond"];
NSString *wyFl = [wyNow objectForKey:@"fl"];
NSString *wyHum = [wyNow objectForKey:@"hum"];
NSString *wyPcpn = [wyNow objectForKey:@"pcpn"];
NSString *wyPres = [wyNow objectForKey:@"pres"];
NSString *wyTmp= [wyNow objectForKey:@"tmp"];
_weatherTemperature.text=wyTmp;
//NSLog(@"%@",self.weatherTemperature.text);
NSDictionary *wyWind = [wyNow objectForKey:@"wind"];
[self requestForNowCond:wyCond];
[self requestForNowWind:wyWind];
}
-(void)requestForComf:(NSDictionary*)jsonComf{
NSString *wyBrf = [jsonComf objectForKey:@"brf"];
NSString *wyTxt = [jsonComf objectForKey:@"txt"];
}
-(void)requestForCw:(NSDictionary*)jsonCw{
NSString *wyBrf = [jsonCw objectForKey:@"brf"];
NSString *wyTxt = [jsonCw objectForKey:@"txt"];
}
-(void)requestForDrsg:(NSDictionary*)jsonDrsg{
NSString *wyBrf = [jsonDrsg objectForKey:@"brf"];
NSString *wyTxt = [jsonDrsg objectForKey:@"txt"];
}
-(void)requestForFlu:(NSDictionary*)jsonFlu{
NSString *wyBrf = [jsonFlu objectForKey:@"brf"];
NSString *wyTxt = [jsonFlu objectForKey:@"txt"];
}
-(void)requestForSport:(NSDictionary*)jsonSport{
NSString *wyBrf = [jsonSport objectForKey:@"brf"];
NSString *wyTxt = [jsonSport objectForKey:@"txt"];
}
-(void)requestForTrav:(NSDictionary*)jsonTrav{
NSString *wyBrf = [jsonTrav objectForKey:@"brf"];
NSString *wyTxt = [jsonTrav objectForKey:@"txt"];
}
-(void)requestForUv:(NSDictionary*)jsonUv{
NSString *wyBrf = [jsonUv objectForKey:@"brf"];
NSString *wyTxt = [jsonUv objectForKey:@"txt"];
}
-(void)requestForSuggestion:(NSDictionary*)jsonSuggestion{
NSDictionary *wySuggestion = [jsonSuggestion objectForKey:@"suggestion"];
NSDictionary *wyComf = [wySuggestion objectForKey:@"comf"];
[self requestForComf:wyComf];
NSDictionary *wyCw = [wySuggestion objectForKey:@"cw"];
[self requestForCw:wyCw];
NSDictionary *wyDrsg = [wySuggestion objectForKey:@"drsg"];
[self requestForDrsg:wyDrsg];
NSDictionary *wyFlu = [wySuggestion objectForKey:@"flu"];
[self requestForFlu:wyFlu];
NSDictionary *wySport = [wySuggestion objectForKey:@"sport"];
[self requestForSport:wySport];
NSDictionary *wyTrav = [wySuggestion objectForKey:@"trav"];
[self requestForTrav:wyTrav];
NSDictionary *wyUv = [wySuggestion objectForKey:@"uv"];
[self requestForUv:wyUv];
}
-(void)request: (NSString*)httpUrl {
NSError *error;
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:httpUrl]];
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
NSArray *jsonArr = [jsonDict objectForKey:@"HeWeather data service 3.0"];
NSDictionary *jsonDictionary = [jsonArr objectAtIndex:];
[self requestForApi:jsonDictionary];
[self requestForBasic:jsonDictionary];
[self requestForDailyForecast:jsonDictionary];
[self requestForHourlyForecast:jsonDictionary];
[self requestForNow:jsonDictionary];
NSString *wyStatus = [[jsonDictionary objectForKey:@"aqi"] objectForKey:@"ok"];
[self requestForSuggestion:jsonDictionary];
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString *httpUrl = @"https://api.heweather.com/x3/weather?cityid=CN101210906&key=1cce17d4649344949ef7a619efec1cd5";
[self request: httpUrl ];
}
解析和风天气API的json(objective-C实现)的更多相关文章
- Android解析中国天气网的Json数据
在Android开发中.一般的APP都是通过获取server端的数据来更新UI.从server获取到的数据能够是Json.它的数据量要比XML要小,这里解析中国天气网上获取的数据,尽管已经不再更新了. ...
- 常见天气api
1. 心知天气API1.1 免费版:400次/小时,也就是9600次/天.国内城市数据,天气实况,3天预报,6项生活指数.这个API的免费版已经提供了很多年了,应该算最长寿稳定的那批API了……1.2 ...
- [转]真正的中国天气api接口xml,json
转自:http://blog.csdn.net/fancylovejava/article/details/26102635 我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还 ...
- (转)真正的中国天气api接口xml,json(求加精) ...
我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还有收费有木有?? 咱这种菜鸟只能用免费的了!!!! http://m.weather.com.cn/data/101110 ...
- json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar ...
- 中国天气api接口xml,json
http://m.weather.com.cn/data/101110101.html 大坑有木有??反应慢不说了,还老不更新!! 想贴段代码的,现在又打不 开了(貌似3月4号以后没更新过) ==== ...
- JAVA的免费天气api接口调用示例
step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...
- 雅虎天气API调用
雅虎天气API调用: 1.调用方法:http://weather.yahooapis.com/forecastrss?w=2502265&u=c,绿色字体为城市代号,u=c表示取摄氏度. 2. ...
- 和风天气WebApi使用教程
1.首先进入和风天气开发平台,点击右上角的注册进行注册 和风天气开发平台 2.填写注册用的邮箱和密码完成注册,可能还需要手机号,按提示注册完成即可. 3.从和风天气开发平台右上角进入控制台,输入你刚刚 ...
随机推荐
- Virtualbox 虚拟机支持硬件摄像头
最近我们公司做了一个摄像头项目,需要测试各种浏览器的情况,我就安装了一个Win xp的虚拟机,但是发现无法找到摄像头,经过查阅资料找到了解决办法 前提环境 Mac电脑 Virtualbox 虚拟机 虚 ...
- php 获取数组第一个元素 以及最后一个元素 && 最后一个元素的键名
1. current() 函数返回数组中的当前元素的值. 每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素. end() - 将内部指针指向数组中 ...
- bugs
2016-09-04 10:24:14.503 Scgl[1035:341694] You've implemented -[<UIApplicationDelegate> applica ...
- 恢复 混淆后的 stacktrace 文件
./tools/proguard/bin/retrace.sh /Users/admin/Downloads/ProguardSample/app/build/outputs/mapping/rele ...
- win7下开启telnet命令
win7下开启telnet命令 win7上telnet这条命令默认被关闭了. 开启telnet方法如下: 一,打开控制面版 二,选择程序 三,选择打开或关闭windows功能 在弹出窗口中把 Teln ...
- 【转载】LR提交JSON格式的请求
需求: 测试一个“修改用户铜板”的接口,这个接口接收JSON格式的请求,返回JSON格式的结果: 必须用PUT方式提交请求: 提交内容: {"method":"modi ...
- [CC]DgmOctree—执行Cell遍历和单元计算
DgmOctree类的executeFunctionForAllCellsAtLevel和executeFunctionForAllCellsStartingAtLevel方法通过回调函数octree ...
- (转)对比MS Test与NUnit Test框架
前言: 项目中进行Unit Test时,肯定会用到框架,因为这样能够更快捷.方便的进行测试. .Net环境下的测试框架非常多,在这里只是对MS Test和NUnit Test进行一下比较, 因为这两个 ...
- XML和JSON数据格式对比
概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...
- alert()、confirm()和prompt()的区别与用法
1.警告消息框alertalert 方法有一个参数,即希望对用户显示的文本字符串.该字符串不是 HTML 格式.该消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式 ...