多线程与网络之JSON和XML数据的解析
JSON 和 OC之间的互转
-
0.简介
1.什么是JSON 1) JSON是一种轻量级的数据格式,一般用于数据交互 2) 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 2.相关说明 1) JSON的格式很像OC中的字典和数组 2) 标准JSON格式key必须是双引号 3.JSON解析方案 1)第三方框架 JSONKit/SBJSON/TouchJSON 2)苹果原生 NSJSONSerialization(常用)
-
1.Json --> OC(反序列化)
/* 第一个参数:要解析的二进制数据(json) 第二个参数: NSJSONReadingMutableContainers = (1UL << 0), 表示时一个可变的数组或者是字典 NSJSONReadingMutableLeaves = (1UL << 1), 字符串也是可变 iOS7有问题 NSJSONReadingAllowFragments = (1UL << 2) 既不是数组也不是字典,必须使用该枚举值 第三个参数:错误信息 */ NSError *error = nil; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
-
2.OC --> Json(序列化)
/* 注意:可以通过+ (BOOL)isValidJSONObject:(id)obj;方法判断当前OC对象能否转换为JSON数据 具体限制: 1.obj 是NSArray 或 NSDictionay 以及他们派生出来的子类 2.obj 包含的所有对象是NSString,NSNumber,NSArray,NSDictionary 或NSNull 3.字典中所有的key必须是NSString类型的 4.NSNumber的对象不能是NaN或无穷大 */ /* 第一个参数:要转换成JSON数据的OC对象,这里为一个字典 第二个参数:NSJSONWritingPrettyPrinted对转换之后的JSON对象进行排版,无意义 */ if ([NSJSONSerialization isValidJSONObject:array]) { NSError *error = nil; NSData *data = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error]; NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); }else { NSLog(@"不能转换"); }
-
3.查看JSON数据
方法一: 把解析后的数据写plist文件,通过plist文件可以直观的查看JSON的层次结构。 [dictM writeToFile:@"/Users/LongLJ/Desktop/xiao.plist" atomically:YES]; 方法二: 在线格式化http://tool.oschina.net/codeformat/json
-
4.视频的简单播放
//0.需要导入系统框架 #import <MediaPlayer/MediaPlayer.h> //1.拿到该cell对应的数据字典 LJVideo *video = self.videos[indexPath.row]; NSString *videoStr = [@"http://120.25.226.186:32812" stringByAppendingPathComponent:video.url]; //2.创建一个视频播放器 MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL URLWithString:videoStr]]; //3.present播放控制器 [self presentViewController:vc animated:YES completion:nil];
XML解析
-
0.简介
- XML: 可扩展标记语言
1.语法 2.XML文档的三部分(声明/元素和属性) 3.其它注意点(注意不能交叉包含/空行换行/XML文档只能有一个根元素等)
- XML解析
1. 解析的两种方式 SAX:从根元素开始,按顺序一个元素一个元素的往下解析,可用于解析大/小文件 DOM:一次性将整个XML文档加载到内存中,适合较小的文件 2. 解析XML的工具 苹果原生NSXMLParser:使用SAX方式解析,简单 第三方框架:libxml2:纯c语言,默认在ios中,同时支持DOM和SAX方式解析 GDataXML:使用DOM方式解析,由Goole开发,基于xml2
-
1.XML解析(NSXMLParser) --- 利用代理方法
// 解析步骤 // 1.创建一个解析器 NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; // 2.设置代理 parser.delegate = self; // 3.开始解析 [parser parse]; // 代理方法 // 1.当开始解析XML文件的时候调用 - (void)parserDidStartDocument:(NSXMLParser *)parser { } // 2.开始解析某个元素的时候调用,调用多次 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { NSLog(@"didStartElement:%@--%@",elementName,attributeDict); [self.videoItems addObject:[LJVideoItem mj_objectWithKeyValues:attributeDict]]; } // 3.结束解析某个元素的时候调用 调用多次 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { } // 4.当结束解析XML文件的时候调用 - (void)parserDidEndDocument:(NSXMLParser *)parser { }
多值参数和中文输出
- 1.多值参数
- 必须参数=值&参数=值来写
- 2.中文输出
- 2.1 新建分类(字典或者数组的分类)
- 2.2 重写
- (NSString *)descriptionWithLocale:(id) locale
方法 - 2.3 在上面方法中拼接元素格式化输出