服务器返回给用户的数据,通常是以下两种方式:
JSON
iOS中的JSON文件解析,是将其转换成OC对象,如下:
XML
XML文档,通常包含以下内容
XML文档的解析方案
解析类型
一个对象通常要遵循以下规则才能转换成JSON文档
JSON数据与OC对象的转化
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error/*** data:需要解析的NSData类型数据* opt:解析方式* error:错误信息*/
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error/*** obj:需要转换的OC对象* opt:解析方式* error:错误信息*/
解析NSString
NSString *json = "I am a coder";[NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil]/*** JSON解析的数据通常是使用NSUTF8StringEncoding编码的NSData类型数据* options:指定可以解析的类型,NSJSONReadingAllowFragments表示可以解析 NSString对象* error:返回解析错误信息* 返回值为解析完成的NSString对象*/
解析NSDictionary与NSArray(来自服务器的数据)
/**Block的方式发送请求*///创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:(此处为请求路径)];//发送请求[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];}];/*** queue:请求任务所在的队列* completionHandler:请求完成回调的Block * response:服务器的响应信息 * data:服务器返回的数据 * error:错误信息 * 将data解析成对应的NSDictionary对象*/
小文件解析(NSXMLParser)
// 1. 开始解析XML文档的时候调用- (void)parserDidStartDocument:(NSXMLParser *)parser// 2. 解析到XML文档中某个元素的开始的时候调用,解析任务的核心- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict/*** elementName:正在解析的元素的名字* attributeDict:解析生成的OC对象*/// 3. 解析到XML文档中某个元素的结束的时候调用- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName// 4. 解析到XML文档结尾的时候调用- (void)parserDidEndDocument:(NSXMLParser *)parser
// 1. 创建解析器 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];// 2. 设置代理parser.delegate = self;// 3. 启动解析器[parser parse];// 4. 在代理方法中完成具体的解析任务
大文件解析(GDataXML)
与GDataXML相关的几个类
解析步骤
// 1. 将XML文档数据,转换成GDataXMLDocument类型的对象GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];// 2. 获取GDataXMLDocument对象中根节点的所有元素NSArray *elements = [document.rootElement elementsForName:@"此处为元素的名字"];/*** 获取XML文档中指定名字的所有元素*/// 3. 解析每个元素中的数据for (GDataXMLElement *ele in elements){ [ele attributeForName:@"此处为元素中的Key"].stringValue; /** * 解析元素ele中键值为Key的属性值,将其转化为字符串对象 */}
新闻热点
疑难解答