ios学习--XML&JSON解析

XML & JSON 简介

XML
--可扩展标记语言
--用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
--易读性高,编码手写难度小,数据量大
JSON
--作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式
--基于JavaScript的一个子集
--易读性略差,编码手写难度大,数据量小
--JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中

XML解析介绍

NSXMLParser解析方法

NSXMLParser是SAX方法解析
--SAX(Simple API for XML)
*只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快
*常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台
*从文档的开始通过每一节点移动,定位一个特定的节点
--DOM(Document Object Model)
*不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档
*一般应用与小型的配置XML,方便操作
*为载入到内存的文档节点建立类型描述,呈现可横向移动、潜在巨大的树型结构
*在内存中生成节点树操作代价昂贵

NSXMLParser解析过程

1. 创建NSXMLParser实例,并传入从服务器接收的XML数据
2. 定义解析器代理
3. 解析器解析
4. 通过解析代理方法完成XML数据的解析

NSXMLParser解析代理方法

/ 1. 开始解析某个元素,会遍历整个XML,识别元素节点名称
- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:
// 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销
- (void)parser:foundCharacters:
// 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息
- (void)parser:didEndElement:namespaceURI:qualifiedName:

注意:在解析过程中,上述三个方法会不停的重复执行,直到遍历完成为止

// 4. 开始解析XML文档
- (void)parserDidStartDocument:
// 5. 解析XML文档结束
- (void)parserDidEndDocument:
// 6. 解析出错
- (void)parser:parseErrorOccurred:

JSON解析介绍

解析服务器端返回的JSON数据

--作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式
--从iOS 5开始,使用NSJSONSerialization对JSON解析
--其他常见的三种JSON解析第三方库:
SBJson
JSONKit
TouchJson
--从性能上来说,NSJSONSerialization最好,JSONKit其次。SBJson使用较为广泛,API简单易用

JSON解析演练

// 加载JSON数据
- (IBAction)loadJSONData:(id)sender
{
    // 定义URL
      NSString *urlStr = [NSString stringWithFormat:@"%@/itcast/videos.php?format=json", WEB_ROOT_URL];
    NSURL *url = [NSURL URLWithString:urlStr];
    
    // 获取网络数据
      NSData *data = [NSData dataWithContentsOfURL:url];
    
    // 反序列化JSON数据,生成NSArray
    NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

    // 将JSON字典写入文件,便于调试
      NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [docs[0]stringByAppendingPathComponent:@"jsonArray.plist"];
    [array writeToFile:docDir atomically:YES];
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值