上一篇介绍了JSON以及本地JSON的解析,这一篇主要介绍如何解析从网络上获取的JSON数据
NSURL *url = [NSURL URLWithString:@"http://tsuios.applinzi.com/ios/weather.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:3];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (connectionError) {//如果出现错误就直接return,不执行下面的代码
NSLog(@"连接错误--%@",connectionError);
return ;
}
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//判读状态码:statusCode当状态码为200或者304的时候我们才解析JSON
if (httpResponse.statusCode == 200 || httpResponse.statusCode == 304) {
NSError *error;
//解析JSON,把JSON形式的字符串解析成OC的对象
id json = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&error];
if (error) {
NSLog(@"解析错误");
}else {
NSLog(@"%@",json);
}
} else { //暂且认为是服务器内部的错误
NSLog(@"服务器内部错误--%ld",(long)httpResponse.statusCode);
}
}];
打印结果
2016-01-06 15:02:49.795 加载网络数据解析JSON[907:22211] {
"temperature" = " -9℃~3℃";
"wind" = " 西北风";
"day_y" = " 2016年1月6日";
"weak" = " 星期三";
"city" = " 北京";
"weather" = " 晴转多云";
}
JSON数据转模型
我们把上面的JSON数据转换成模型
- 新建一个XNWeatherJSON的模型类
- XNWeatherJSON.h
#import <Foundation/Foundation.h>
@interface XNWeatherJSON : NSObject
/**
* 温度
*/
@property (nonatomic, copy) NSString *temperature;
/**
* 风向
*/
@property (nonatomic, copy) NSString *wind;
/**
* 日期
*/
@property (nonatomic, copy) NSString *day_y;
/**
* 星期
*/
@property (nonatomic, copy) NSString *weak;
/**
* 城市
*/
@property (nonatomic, copy) NSString *city;
/**
* 天气
*/
@property (nonatomic, copy) NSString *weather;
+ (instancetype)weatherWithDict:(NSDictionary *)dict;
@end
- XNWeatherJSON.m
#import "XNWeatherJSON.h"
@implementation XNWeatherJSON
+ (instancetype)weatherWithDict:(NSDictionary *)dict {
id obj = [[self alloc]init];
[obj setValuesForKeysWithDictionary:dict];
return obj;
}
@end
//解析JSON,把JSON形式的字符串解析成OC的对象
id json = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&error];
//把字典转换成模型
XNWeatherJSON *weather = [XNWeatherJSON weatherWithDict:json];
打印
NSLog(@"%@",weather.temperature);
控制台输出结构
2016-01-06 16:01:16.927 加载网络数据解析JSON[1515:58156] -9℃~3℃
补充
常见错误码
1xx - 信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
- 100 - 继续。
- 101 - 切换协议。
2xx - 成功
这类状态代码表明服务器成功地接受了客户端请求。
- 200 - 确定。客户端请求已成功。
- 201 - 已创建。
- 202 - 已接受。
- 203 - 非权威性信息。
- 204 - 无内容。
- 205 - 重置内容。
- 206 - 部分内容。
-3xx - 重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
- 302 - 对象已移动。
- 304 - 未修改。
- 307 - 临时重定向。
- 4xx - 客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
- 400 - 错误的请求。