App要与服务器交互才能达到数据更新和获取资源 那么: 服务器返回客户端的数据,一般返回两种格式:JSON格式、XML格式 (文件下载除外)
什么是JSON轻量级数据格式,一般用于数据交互
JSON格式:key必须使用双引号{"type" : "super", "user_name" : "jack"}; {"user_names" : ["jack", "rose", "jim"]}JSON数据(NSData) -> OC对象(Foundation Object){} -> NSDictionary @{}[] -> NSArray @[]"jack" -> NSString @"jack"15 -> NSNumber @1012.5 -> NSNumber @10.5true -> NSNumber @1false -> NSNumber @0null -> NSNullPaste_Image.png
JSON解析方案iOS中有四种解析方案
前三种:第三方框架:JSONKit、 SBJson、TouchJson(最差)
SBJson简单用法 NSData *data = nil; NSDictionary *dict = [data JSONValue]; // JSON字符串也可以使用此方法 NSDictionary *dict1 = [@"{"height": 2}" JSONValue];第四种:苹果自带:NSJSONSerialization(性能最好,iOS5.0出现)
JSON数据(NSData) -> OC对象(Foundation Object)// 利用NSJSONSerialization类 + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;在解析JSON方法NSJSONReadingOptions参数:
NSJSONReadingOptions NSJSONReadingMutableContainers = (1UL << 0) 创建出来的数组和字典就是可变NSJSONReadingMutableLeaves = (1UL << 1) 数组或者字典里面的字符串是可变的NSJSONReadingAllowFragments 允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumberKNilOptions 如果不在乎服务器返回的是可变的还是不可变的,直接传入KNilOptions,效率最高!返回的就是不可变的如何解析JSON:- (void)parseJSON // JSON格式化: { // 0.请求路径 NSURL *url = [NSURL URLWithString:@"http://110.20.256.139:30693/login?username=jack&pwd=superman123"]; // 1.创建请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 2.发送请求 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { /* NSJSONReadingMutableContainers NSJSONReadingMutableLeaves NSJSONReadingAllowFragments */ // 解析JSON NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; // 打印解析出来的结果 NSLog(@"%@", dict[@"success"]); NSLog(@"%@", dict[@"error"]); // **** 也可以将服务器返回的字典写成plist文件 [dict writeToFile:@"/Users/leichao/Desktop/video.plist" atomically:YES]; }]; }OC对象(Foundation Object)-> JSON数据(NSData)// 利用NSJSONSerialization类 + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error; // 将字典转成字符串 // NSJSONWritingPrettyPrinted : 好看的印刷 NSData *date = [NSJSONSerialization dataWithJSONObject:@{@"name" : @"jack"} options:NSJSONWritingPrettyPrinted error:nil]; NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];格式化服务器返回的JSON数据在线格式化: http://tool.oschina.net/codeformat/json 将服务器返回的字典或者数组写成plist文件
[dict writeToFile:@"/Users/leichao/Desktop/video.plist" atomically:YES];什么是XML暂时不写了
---来自腾讯云社区的---雷潮
微信扫一扫打赏
支付宝扫一扫打赏