暑假在家闲着没事干,心血来潮想做个天气预报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实现)的更多相关文章

  1. Android解析中国天气网的Json数据

    在Android开发中.一般的APP都是通过获取server端的数据来更新UI.从server获取到的数据能够是Json.它的数据量要比XML要小,这里解析中国天气网上获取的数据,尽管已经不再更新了. ...

  2. 常见天气api

    1. 心知天气API1.1 免费版:400次/小时,也就是9600次/天.国内城市数据,天气实况,3天预报,6项生活指数.这个API的免费版已经提供了很多年了,应该算最长寿稳定的那批API了……1.2 ...

  3. [转]真正的中国天气api接口xml,json

    转自:http://blog.csdn.net/fancylovejava/article/details/26102635 我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还 ...

  4. (转)真正的中国天气api接口xml,json(求加精) ...

      我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还有收费有木有?? 咱这种菜鸟只能用免费的了!!!! http://m.weather.com.cn/data/101110 ...

  5. 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  ...

  6. 中国天气api接口xml,json

    http://m.weather.com.cn/data/101110101.html 大坑有木有??反应慢不说了,还老不更新!! 想贴段代码的,现在又打不 开了(貌似3月4号以后没更新过) ==== ...

  7. JAVA的免费天气api接口调用示例

    step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...

  8. 雅虎天气API调用

    雅虎天气API调用: 1.调用方法:http://weather.yahooapis.com/forecastrss?w=2502265&u=c,绿色字体为城市代号,u=c表示取摄氏度. 2. ...

  9. 和风天气WebApi使用教程

    1.首先进入和风天气开发平台,点击右上角的注册进行注册 和风天气开发平台 2.填写注册用的邮箱和密码完成注册,可能还需要手机号,按提示注册完成即可. 3.从和风天气开发平台右上角进入控制台,输入你刚刚 ...

随机推荐

  1. Sublime Text 使用笔记

    常用快捷键 command+shift+d   # 复制当前行到下一行 .

  2. 加快ArcGIS Server创建缓存速度,CachingTools的实例数

    大比例尺的缓存,由于文件非常大,创建非常花费时间,在硬件设备已固定的情况下,调整Caching tools的实例数是加快创建缓存的方法之一. 简单来说:CachingTools的最大并行实例数决定了C ...

  3. SSD Trim Support -- 保护 SSD

    今天同事告诉我,换了 ssd 之后需要做以下配置能使 ssd 寿命更长.原理是配置系统定期清理和回收 ssd 的资源. 最终效果: 步骤: 1.下载 trim enabler: https://gis ...

  4. php识别中文编码并自动转换为UTF-8

    原文地址:http://www.codefans.net/articles/1272.shtml php自动识别编码,若里面有中文的话,将其转换为UTF-8就最好了,因为中文在Gbk编辑情况情况下,有 ...

  5. Ubuntu 14.04 编译安装 husky

    简介 Husky是一个大数据分布式开发框架,用C++开发,因为粗粒度(coarse-grained)平台(如Spark,Hadoop,Flink)MR耗时太大,然后细粒度(fine-grained)平 ...

  6. ECshop通过文章分类的ID实现不同模板

    当客户需要想要用不同模板来实现文章页面时,文章就需要实现调用不同模板的内容,着手点就是它的分类ID.直接通过分类ID来判断一下,现在68ecshop技术来告诉你该怎么做 方法如下所示: 一.打开根目录 ...

  7. JMeter学习-029-JMeter配置文件propertie配置项读取及应用实例

    在上文中提到通过读取配置文件中的数据,以此定制JMeter Slave的脚本分发路径(默认脚本路径,即参数文件相对路径父目录). 此文,就以此为例进行实例说明. 通过阅读JMeter源码 core/s ...

  8. Python实现简单的记账本功能

    目标: 1.使用序列化cPickle 2.账户中钱要大于花费的钱,否则提示请存钱 2.编写函数,实现存钱,花钱,查询及退出功能 1.序列化 pickle是python实现序列化的模块,次模块存在使用C ...

  9. Python资源大全

    The Python Tutorial (Python 2.7.11) 的中文翻译版本.Python Tutorial 为初学 Python 必备官方教程,本教程适用于 Python 2.7.X 系列 ...

  10. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...