ios网络iOS高质量博客

json解析

2016-06-24  本文已影响280人  fwlong

在iOS中,JSON的常见解析方案有4种
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
苹果原生(自带):NSJSONSerialization(性能最好)

NSJSONSerialization的常见方法

JSON数据(NSData) ->OC对象(Object)

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
- (void)parseJSON
{
    // 0.请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520000&pwd=520it"];
    
    // 1.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 2.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        /*
         NSJSONReadingMutableContainers
         NSJSONReadingMutableLeaves
         NSJSONReadingAllowFragments
不在乎返回的是什么东西,就用kNilOptions,效率最好
         */
        // 解析JSON
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        
        NSLog(@"%@", dict[@"error"]);
    }];
}

OC对象 ->JSON数据

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
NSData * data1 = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
NSString * str =  [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
JSON.png
JSON数据解析出来,有时不方便阅读,可以使用JSON格式化工具排版(自行百度),或者转为plist文件。
[dict writeToFile:@"/Users/zhaoce/Desktop/video.plist" atomically:YES];

总结

JSON数据(NSData) -> OC对象(Foundation Object)

JSON数据(NSData) -> OC对象(Foundation Object)

// 利用NSJSONSerialization类
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

OC对象(Foundation Object)-> JSON数据(NSData)

// 利用NSJSONSerialization类
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

格式化服务器返回的JSON数据

获取视频的字典数组

@property(nonatomic,strong)NSArray * videos;
 //0.请求路径
    NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/video"];
    //1.创建请求对象
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //2.发送请求
    
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        //解析JSON 序列化
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        
        //获取视频的字典数组
        NSArray * dictArray = dict[@"videos"];
        
        // 字典数组 —》 模型数组
        NSMutableArray * videoArray = [NSMutableArray array];
        for (NSDictionary * dict in dictArray) {
            [videoArray addObject:[FWLVideo videoWithDict:dict]];
        }
        self.videos = videoArray;
        //刷新表格
        [self.tableView reloadData];
        
    }];

上一篇 下一篇

猜你喜欢

热点阅读