iOS代码技巧之ASIHttpRequest类库的使用及Json解析(以解析中国天气网天气预报为例)

摘要  第三方类库ASIhttpRequest的使用,用于iOS的网络请求,与JsonKit一起使用,可以很方便的进行网络数据请求与解析。 为了说明方法的使用,这里以解析天气预报为例

声明:由于ASIHttpRequest作者已早不进行维护,而且ios版本已经更新到7,为了大家的代码在ios7下能更加高效和保险,建议使用AFNetworking类库,此类库也是ASI的作者所推荐的,如只是学习了解网络方面内容,可以参考本博客,关于AFNetworking的使用,相关博客本人会尽快整理

一、下载ASIHttpRequest的类库JSONKit类库添加到工程中

  • ASIHttpRequest类库包含文件,还有.m文件,由于名字相同,只列举.h文件
  • ,以及Reachability.h和.m文件
  • JSONKit中只有JSONKit.h和JSONKit.m两个文件

二、添加framework(参考链接中第十二步)

?
1
2
3
4
5
CFNetwork.framework
SystemConfiguration.framework
MobileCoreServices.framework
CoreGraphics.framework
libz.1.2.3.dylib

三、网络请求

声明URL:此处以镇江为例,更多城市代码

在.m文件中

?
1
#import"ASIHttpRequest.h"
?
1
#import"JSONKit.h"
?
1
#define GET_WEATHER_URL [NSURL URLWithString:@"http://m.weather.com.cn/data/101190301.html"]

在.h文件中声明ASIHttpRequestDelegate

?
1
<ASIHTTPRequestDelegate>
在需要请求网络部分添加代码
?
1
2
3
4
5
6
7
8
//定义request
     ASIHTTPRequest *requestWeather = [ASIHTTPRequest requestWithURL:GET_WEATHER_URL];
     //设置代理
     requestWeather.delegate = self;
     //设置请求成功的回调方法,也可设置失败方法didFailSelector,如果调用失败方法,说明未成功,方便自己进行调试和处理
     requestWeather.didFinishSelector = @selector(requestWeatherFinished:);
     //开始异步请求
     [requestWeather startAsynchronous];

完成回调方法(其中的WeatherModal是自定义的一个类,为了方便存储返回的json数据,见下文)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-( void )requestWeatherFinished:(ASIHTTPRequest *)request
{  
     NSDictionary *object = [[request responseString] JSONValue]; //获取返回数据,有时有些网址返回数据是NSArray类型,可先获取后打印出来查看数据结构,再选择处理方法,得到所需数据
     //获取object中数据
     NSDictionary *weather = [object objectForKey:@ "weatherinfo" ];
     weatherModal *modal = [weatherModal alloc] init]; //若未使用ARC,记得release
     modal.city = [weather objectForKey:@ "city" ];  //城市名称
     modal.date_y = [weather objectForKey:@ "date_y" ]; //日期
     // 六天天气
     modal.weather1 = [weather objectForKey:@ "weather1" ];
     modal.weather2 = [weather objectForKey:@ "weather2" ];
     modal.weather3 = [weather objectForKey:@ "weather3" ];
     modal.weather4 = [weather objectForKey:@ "weather4" ];
     modal.weather5 = [weather objectForKey:@ "weather5" ];
     modal.weather6 = [weather objectForKey:@ "weather6" ];
 
     // 六天风速
     modal.wind1 = [weather objectForKey:@ "wind1" ];
     modal.wind2 = [weather objectForKey:@ "wind2" ];
     modal.wind3 = [weather objectForKey:@ "wind3" ];
     modal.wind4 = [weather objectForKey:@ "wind4" ];
     modal.wind5 = [weather objectForKey:@ "wind5" ];
     modal.wind6 = [weather objectForKey:@ "wind6" ];
     
     // 天气变化
     modal.img_title1 = [weather objectForKey:@ "img_title1" ];
     modal.img_title2 = [weather objectForKey:@ "img_title2" ];
     modal.img_title3 = [weather objectForKey:@ "img_title3" ];
     modal.img_title4 = [weather objectForKey:@ "img_title4" ];
     modal.img_title5 = [weather objectForKey:@ "img_title5" ];
     modal.img_title6 = [weather objectForKey:@ "img_title6" ];
     modal.img_title7 = [weather objectForKey:@ "img_title7" ];
     modal.img_title8 = [weather objectForKey:@ "img_title8" ];
     modal.img_title9 = [weather objectForKey:@ "img_title9" ];
     modal.img_title10 = [weather objectForKey:@ "img_title10" ];
     modal.img_title11= [weather objectForKey:@ "img_title11" ];
     modal.img_title12= [weather objectForKey:@ "img_title12" ];
     // 温度
     modal.temp1 = [weather objectForKey:@ "temp1" ];
     modal.temp2 = [weather objectForKey:@ "temp2" ];
     modal.temp3 = [weather objectForKey:@ "temp3" ];
     modal.temp4 = [weather objectForKey:@ "temp4" ];
     modal.temp5 = [weather objectForKey:@ "temp5" ];
     modal.temp6 = [weather objectForKey:@ "temp6" ];
     modal.week = [weather objectForKey:@ "week" ];
}

WeatherModal.h,此类是自定义类型,若需要像NSString一样拷贝赋值,只需加上一个方法,请参考自定义类拷贝办法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#import <Foundation/Foundation.h>
 
@interface weatherModal : NSObject
{
     NSString *_city;
     NSString *_city_en;
     NSString *_cityid;
     NSString *_date;
     NSString *_date_y;
 
     NSString *_img_single;
     NSString *_img_title1;
     NSString *_img_title10;
     NSString *_img_title11;
     NSString *_img_title12;
     NSString *_img_title2;
     NSString *_img_title3;
     NSString *_img_title4;
     NSString *_img_title5;
     NSString *_img_title6;
     NSString *_img_title7;
     NSString *_img_title8;
     NSString *_img_title9;
     NSString *_img_title_single;
   
     NSString *_temp1;
     NSString *_temp2;
     NSString *_temp3;
     NSString *_temp4;
     NSString *_temp5;
     NSString *_temp6;
    
     NSString *_weather1;
     NSString *_weather2;
     NSString *_weather3;
     NSString *_weather4;
     NSString *_weather5;
     NSString *_weather6;
     NSString *_week;
     NSString *_wind1;
     NSString *_wind2;
     NSString *_wind3;
     NSString *_wind4;
     NSString *_wind5;
     NSString *_wind6;
}
@property(nonatomic,copy) NSString *city;
@property(nonatomic,copy) NSString *city_en;
@property(nonatomic,copy) NSString *cityid;
@property(nonatomic,copy) NSString *date;
@property(nonatomic,copy) NSString *date_y;
 
 
@property(nonatomic,copy) NSString *img_single;
@property(nonatomic,copy) NSString *img_title1;
@property(nonatomic,copy) NSString *img_title10;
@property(nonatomic,copy) NSString *img_title11;
@property(nonatomic,copy) NSString *img_title12;
@property(nonatomic,copy) NSString *img_title2;
@property(nonatomic,copy) NSString *img_title3;
@property(nonatomic,copy) NSString *img_title4;
@property(nonatomic,copy) NSString *img_title5;
@property(nonatomic,copy) NSString *img_title6;
@property(nonatomic,copy) NSString *img_title7;
@property(nonatomic,copy) NSString *img_title8;
@property(nonatomic,copy) NSString *img_title9;
@property(nonatomic,copy) NSString *img_title_single;
 
 
@property(nonatomic,copy) NSString *temp1;
@property(nonatomic,copy) NSString *temp2;
@property(nonatomic,copy) NSString *temp3;
@property(nonatomic,copy) NSString *temp4;
@property(nonatomic,copy) NSString *temp5;
@property(nonatomic,copy) NSString *temp6;
 
@property(nonatomic,copy) NSString *weather1;
@property(nonatomic,copy) NSString *weather2;
@property(nonatomic,copy) NSString *weather3;
@property(nonatomic,copy) NSString *weather4;
@property(nonatomic,copy) NSString *weather5;
@property(nonatomic,copy) NSString *weather6;
@property(nonatomic,copy) NSString *week;
@property(nonatomic,copy) NSString *wind1;
@property(nonatomic,copy) NSString *wind2;
@property(nonatomic,copy) NSString *wind3;
@property(nonatomic,copy) NSString *wind4;
@property(nonatomic,copy) NSString *wind5;
@property(nonatomic,copy) NSString *wind6;
 
 
@end

weatherModal.m中对这些属性进行synthesize即可

PS:在解析json值时若是值关键字比较多均可定义一个modal进行存储数据,比较方便

附上我做的效果图,天气图片不是解析得到(也可解析得到,安卓成功,但本人ios没有解析成功,原因未知),是自己找好图片后,根据关键字进行匹配放置的


图片共享一下

  晴天        多云      阵雨       阴天       小雨       中雨      大雨      大到暴雨    雷阵雨

        



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值