解析和风天气API的json(objective-C实现)

暑假在家闲着没事干,心血来潮想做个天气预报APP玩玩,听说和风天气API很好,于是注册并试了下,结果它的JSON是这样的(拿我的家乡武义为例子)

{"HeWeather data service 3.0":[{"aqi":{"city":{"aqi":"73","pm10":"54","pm25":"39","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":"100","code_n":"101","txt_d":"晴","txt_n":"多云"},"date":"2016-08-16","hum":"54","pcpn":"0.0","pop":"0","pres":"1001","tmp":{"max":"38","min":"27"},"vis":"10","wind":{"deg":"121","dir":"无持续风向","sc":"微风","spd":"3"}},{"astro":{"sr":"05:32","ss":"18:39"},"cond":{"code_d":"100","code_n":"100","txt_d":"晴","txt_n":"晴"},"date":"2016-08-17","hum":"54","pcpn":"0.0","pop":"1","pres":"1000","tmp":{"max":"38","min":"27"},"vis":"10","wind":{"deg":"123","dir":"东风","sc":"微风","spd":"10"}},{"astro":{"sr":"05:33","ss":"18:38"},"cond":{"code_d":"100","code_n":"100","txt_d":"晴","txt_n":"晴"},"date":"2016-08-18","hum":"55","pcpn":"0.0","pop":"1","pres":"1000","tmp":{"max":"38","min":"28"},"vis":"10","wind":{"deg":"148","dir":"东风","sc":"微风","spd":"3"}},{"astro":{"sr":"05:33","ss":"18:37"},"cond":{"code_d":"101","code_n":"101","txt_d":"多云","txt_n":"多云"},"date":"2016-08-19","hum":"56","pcpn":"0.0","pop":"0","pres":"1000","tmp":{"max":"38","min":"29"},"vis":"10","wind":{"deg":"158","dir":"东风","sc":"微风","spd":"8"}},{"astro":{"sr":"05:34","ss":"18:36"},"cond":{"code_d":"101","code_n":"101","txt_d":"多云","txt_n":"多云"},"date":"2016-08-20","hum":"49","pcpn":"0.0","pop":"8","pres":"1001","tmp":{"max":"37","min":"27"},"vis":"10","wind":{"deg":"138","dir":"东风","sc":"微风","spd":"0"}},{"astro":{"sr":"05:34","ss":"18:35"},"cond":{"code_d":"101","code_n":"101","txt_d":"多云","txt_n":"多云"},"date":"2016-08-21","hum":"46","pcpn":"0.0","pop":"0","pres":"1002","tmp":{"max":"36","min":"26"},"vis":"10","wind":{"deg":"100","dir":"东风","sc":"微风","spd":"4"}},{"astro":{"sr":"05:35","ss":"18:34"},"cond":{"code_d":"101","code_n":"101","txt_d":"多云","txt_n":"多云"},"date":"2016-08-22","hum":"45","pcpn":"0.0","pop":"0","pres":"1003","tmp":{"max":"35","min":"25"},"vis":"10","wind":{"deg":"89","dir":"东风","sc":"微风","spd":"0"}}],"hourly_forecast":[{"date":"2016-08-16 19:00","hum":"72","pop":"0","pres":"1001","tmp":"36","wind":{"deg":"136","dir":"东南风","sc":"微风","spd":"7"}},{"date":"2016-08-16 22:00","hum":"83","pop":"0","pres":"1003","tmp":"34","wind":{"deg":"142","dir":"东南风","sc":"微风","spd":"8"}}],"now":{"cond":{"code":"100","txt":"晴"},"fl":"44","hum":"43","pcpn":"0","pres":"1000","tmp":"36","vis":"10","wind":{"deg":"128","dir":"东风","sc":"4-5","spd":"20"}},"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=0;day<7;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];
    for(int day=0;day<2;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"];
    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 {
    NSURL *url = [NSURL URLWithString: httpUrl];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url       cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10];
    [request setHTTPMethod: @"GET"];
    NSURLSession *session = [NSURLSession sharedSession];
    //__block  NSString *result = @"";
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (!error) {
            NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
            NSArray *jsonArr = [jsonDict objectForKey:@"HeWeather data service 3.0"];
            NSDictionary *jsonDict2 = [jsonArr objectAtIndex:0];
              [self requestForApi:jsonDict2];
            [self requestForBasic:jsonDict2];
    [self requestForDailyForecast:jsonDict2];
   [self requestForHourlyForecast:jsonDict2];
              [self requestForNow:jsonDict2];
            NSString *wyStatus = [[jsonDict2 objectForKey:@"aqi"] objectForKey:@"ok"];
       [self requestForSuggestion:jsonDict2];
            //NSLog(@"返回正确:%@",jsonDict2);
        }else{
            //出现错误;
            NSLog(@"错误信息:%@",error);
        }

    }];
    [dataTask resume];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *httpUrl = @"https://api.heweather.com/x3/weather?cityid=CN101210906&key=1cce17d4649344949ef7a619efec1cd5";
    [self request: httpUrl ];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

  

时间: 2024-08-15 12:41:00

解析和风天气API的json(objective-C实现)的相关文章

使用python调用和风天气API查询当前天气信息

和风天气网址:https://www.heweather.com/ 注册后在控制台会有个人认证key API帮助文档:https://www.heweather.com/documents/api/v5 #!/usr/bin/python #-*-coding:utf-8-*- #调用和风天气API查询当前天气信息 #2017/07/12 import json import urllib2 import os city='北京' #在和风天气注册后获得的key key='your key' c

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

在Android开发中.一般的APP都是通过获取server端的数据来更新UI.从server获取到的数据能够是Json.它的数据量要比XML要小,这里解析中国天气网上获取的数据,尽管已经不再更新了.但用来学习还是能够的.为了方便我直接到数据通过txt保存到本地,它的数据能够通过这个页面获取:http://m.weather.com.cn/data/101280601.html 文件夹结构 事实上解析也非常easy.关键代码 private void json3() { InputStream

Android中 GsonFormat插件解析Jason 数据+和风天气接口解析案例

首先 转载自http://www.cnblogs.com/androidsuperman/p/4579249.html     感谢 @西北野狼  同学. 第一部分: GsonFormat 插件基本使用方法 很久以前写json解析用原始的解析json的方法,后来为了加快开发进度,开始使用gson,fastjson等第三方jar包来进行json解析,为了保持apk足够小,不因为引入jar包导致apk文件过大,选择使用gson来加速json解析,当然,去年androidstudio 1.0版本出来,

JSON之三:获取JSON文本并解释(以google的天气API为例)

google提供了天气的api,以广州天气为例,地址为: http://api.openweathermap.org/data/2.5/weather?q=guangzhou 返回的结果为: { "coord": { "lon": 113.25, "lat": 23.12 }, "sys": { "message": 0.2088, "country": "CN",

JAVA调用聚合天气api接口示例

查询天气预报在APP中常用的一个常用功能,聚合数据免费天气api接口可以根据根据城市名/id查询天气.根据IP查询天气.据GPS坐标查询天气.查询城市天气三小时预报,并且支持全国不同城市天气预报查询. 代码描述:基于JAVA的免费天气api接口调用示例,根据文档中注明的需求参数,调用接口返回数据. 关联数据:免费天气api 接口地址:https://www.juhe.cn/docs/api/id/39 step1:选择本文所示例的接口"免费天气api" url:https://www.

【第29篇】通过HttpClient+Gson解析中国天气网的天气预报信息

http://jilongliang.iteye.com/blog/1932110 package com.test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; im

天气API接口大全(nohacks.cn 收集整理)

自序: 由nohacks.cn 收集整理,来源于网络,版权归原作者所有,基本收集了网络上能使用的大部分天气API接口,作者水平精力有限,难免有遗漏或错误的地方,欢迎反馈,作者网站:http://nohacks.cn 更新记录: 2015.3.2    更新云聚,增加天气网接口. 2015.2.28  增加百度天气图片,感谢网友彬子的反馈. 2015. 2.19 增加百度天气接口,更新中国天气网API. 目录: 1.  中国天气网 1.1  实时天气 API 接口(失效) 1.2  当天天气 AP

.Net MVC 4 Web Api 输出Json 格式

1.Global 中增加json输出 GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("json", "true", "application/json")); protected void Application_Start() { AreaRegistration.RegisterAl

wp8.1 调用中国天气api

在调用api应用的过程,我们需要用hmac加密技术,它是一种基于hash的加密算法,通过一个双方共同约定的密钥,在发送message前,对密钥进行了sha散列计算,在生成消息又对此密钥进行了二次加密,通过周期性的更换密钥,安全性可以得到保障. 在wp8.1 sdk中很多传统系统类库被整编进以windows打头的命名空间中,很多刚接触wp8.1朋友可能觉得疑惑. 代码所需命名空间. 1 using System; 2 using System.Net.Http; 3 using System.Th