"JSON解析"JSON是一种轻量级的数据格式,服务器返回给客户端的数据一般都是JSON格式或者XML格式。文件下载除外。JSON格式很想OC中的饿字典和数组。注意:标准JSON格式的key必须是双引号""
JSON和OC对象之间的对应关系:{字典}、[数组]、"字符串"
10/10.1-> NSNumber
true/false-> NSNumber
null -> NSNull
JSON的解析方案:第三方框架和苹果原生。苹果原生的NSJSONSerialization是性能最好的。
1,JSON ——> OC:反序列化
在NSURLSession返回的响应的block块中,解析返回的data数据
[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
2,OC ——> JSON:序列化
可以先判断当前对象能否转为JSON:+ (BOOL)isValidJSONObject:(id)obj;
NSData *data = [NSJSONSerialization dataWithJSONObject:dictM options:NSJSONWritingPrettyPrinted error:nil];
"XML解析":可扩展标记语言。XML文档的三部分,声明、元素、和属性。
XML解析工具:第三方框架和苹果原生。苹果原生:NSXMLParser,使用SAX方式解析,按顺序一个元素一个元素的往下解析,可用于解析大、小文件
注意点:1,注意不能交叉包含。2,空格也算内容。3,标准的XML只有一个根元素。
解析步骤:
使用NSXMLParser解析,和代理方法。
1,创建一个解析器。
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
2,设置代理。
parser.delegate =self;
3,开始解析。
[parser parse];
代理方法:
-(void)parserDidStartDocument:(nonnullNSXMLParser *)parser//开始解析XML文档的时候调用。
-(void)parser:(nonnullNSXMLParser *)parser didStartElement:(nonnullNSString *)elementName namespaceURI:(nullableNSString *)namespaceURI qualifiedName:(nullableNSString *)qName attributes:(nonnullNSDictionary *)attributeDict {//开始解析XML中某个元素的时候调用,
if([elementName isEqualToString:@"videos"]) {
return;
}
//字典转模型
XMGVideo *video = [XMGVideo objectWithKeyValues:attributeDict];
[self.videos addObject:video];
}
-(void)parser:(nonnullNSXMLParser *)parser didEndElement:(nonnullNSString *)elementName namespaceURI:(nullableNSString *)namespaceURI qualifiedName:(nullableNSString *)qName//当某个元素解析完成之后调用。
-(void)parserDidEndDocument:(nonnullNSXMLParser *)parser// XML文档解析结束之后调用。