美文网首页iOS Coding
iOS-解析JSON(二)

iOS-解析JSON(二)

作者: 看我的大白眼 | 来源:发表于2016-01-06 16:21 被阅读380次

上一篇介绍了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 - 错误的请求。

更详细的状态码可以去 http://jasonxiawanjian.iteye.com/blog/1884562

相关文章

网友评论

    本文标题:iOS-解析JSON(二)

    本文链接:https://www.haomeiwen.com/subject/revxkttx.html