http-//blog.sina.com.cn/s/blog_6ae8b50d0101apja.html
数据解析:从事先规定好的格式中提取数据
//NSJSONSerialization 解析JSON数据
//+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;解析JSON数据的方法
#pragma mark ****JSON数据解析****
一、JSON解析
1、概念:Javaacript object Notation 轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言,易与人阅读和便携,同时相同数据用JSON编辑所占的内存更小
2、结构
(1)对象、字典
以‘{’开始以‘}’结束,名称和值之间用‘:’隔开。多个‘名称/值’对之间用‘,’隔开。
例如: {"name":"Jay","age":22}
(2)数组
以‘[’开始以‘]’结束,中间是数据,数据用‘,’隔开。
例如: ["Jay","二狗"]
"字符串"--NSString类型;18--NSNumber类型;{}--NSDictionary;[]--NSArray
3、实例
4、解析方法
(1)第三方框架:JSONKit、SBJSON、TouchJSON
(2)系统提供的解析方法:NSJSONSerialization
#pragma mark ****XML数据解析****
二、XML解析
1、概念:可扩展标记语言
2、XML数据结构
(1)
<标签名> **开始标签
...具体的值
**结束标签 =字符串(相当于字符串)
(2)
<标签名>
<标签名1>888
<标签名1>666
=数组
(3)
<标签名>
<不同的标签名1>XXX
<不同的标签名2>KKK
= 字典
3、XML数据解析
GDataXMLNode:用来解析XML文件
(1)GDataXMLDocument 读取文档
(2)GDataXMLElement 读取文档里面的元素 可以通过具体的方法转换成OC需要的数据·1
**使用GDataXMLNode
1、需要导入libxml2
2、需要在bulid setting -> header search paths ->添加/usr/include/libxml2
#pragma mark ---练习实战---
NSString *path = [[NSBundle mainBundle]pathForResource:@"name.txt" ofType:nil];
//NSData 可以存储任意类型的数据
NSData *data = [NSData dataWithContentsOfFile:path];
//NSJSONSerialization 解析JSON数据
//+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;解析JSON数据的方法
#pragma mark ****JSON数据解析****
//JSONObjectWithData这个方法返回值是ID类型 可以使用JSON数据中最外层的数据类型去接收
NSArray *list = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *modelArray = [UserModel arrayOfModelsFromDictionaries:list error:nil];
UserModel *model = modelArray[0];
NSLog(@"%@",model.address);
#pragma mark ****XML数据解析****
//1、读取文件路径、内容
NSString *xmlpath = [[NSBundle mainBundle]pathForResource:@"github.xml"ofType:nil];
NSString *content = [NSString stringWithContentsOfFile:xmlpath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",content);
//2、通过GDataXMLDocument读取XML文件
GDataXMLDocument *booksDocument = [[GDataXMLDocumentalloc]initWithXMLString:content encoding:NSUTF8StringEncoding error:nil];
//取出XML里面最外层的元素
//booksDocument.rootElement
//读取GDataXMLElement对应的OC数据类型
//- (NSArray *)elementsForName:(NSString *)name; 返回值是一个数组
NSArray *elements = [booksDocument.rootElement elementsForName:@"book"];
// NSLog(@"%@",elements);//GDataXMLElement类型
GDataXMLElement *element = elements[0];
NSArray *nameElementList = [element elementsForName:@"name"];
NSString *name = [nameElementList.firstObject stringValue];
NSLog(@"%@",name);
//info 具体书的内容(名字 价格)
NSMutableDictionary *info = [NSMutableDictionary dictionary];
//resultList解析完成之后的数组 存的字典
NSMutableArray *resultList = [NSMutableArray array];
for (GDataXMLElement *element inelements) {
NSString *name = [[element elementsForName:@"name"].firstObject stringValue];
NSString *price = [[element elementsForName:@"price"].firstObject stringValue];
[info setObject:name forKey:@"name"];
[info setObject:price forKey:@"price"];
[resultList addObject:info];
}
网友评论