博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS网络-02-数据解析(JSON与XML)
阅读量:4606 次
发布时间:2019-06-09

本文共 3382 字,大约阅读时间需要 11 分钟。

数据交互格式


  • 服务器返回给用户的数据,通常是以下两种方式:
    • JSON
    • XML
  • JSON
    • 一种轻量级的数据数据格式,体积比XML小,是服务器返回给移动端通常采用的格式
    • 用使用JSON文件中的数据,需要对其进行解析,苹果的NSJSONSerialization解析性能最好
    • iOS中的JSON文件解析,是将其转换成OC对象,如下:
      • 大括号{} --> 字典NSDictionary
      • 中括号[] --> 数组NSArray
      • 双引号"" --> 字符串NSString
      • 数字 --> NSNumber
    • JSON通常使用NSJSONSerialization进行解析,性能最好
  • XML
    • XML(Extension Markup Language),可扩展标记语言
    • 是服务器返回客户端常用的一种数据格式
    • XML文档,通常包含以下内容
      • 文档声明
      • 元素(element)
      • 属性(attribute)
    • XML文档的解析方案
      • 小文件:NSXMLParser苹,果原生
      • 大文件:GDataXML,Google开发,基于libxml2

JSON解析


  • 解析类型
    • 默认解析NSDictionary与NSArray类型的数据
    • 若要解析NSString类型的数据,需要使用NSJSONReadingAllowFragments参数
  • 一个对象通常要遵循以下规则才能转换成JSON文档
    • 根节点是NSDictionary或NSArray类型
    • 所有的对象必须是NSString、NSNumber、NSArray、NSDictionary或NSNull中的一种
    • 对象个数有限
  • JSON数据与OC对象的转化
    • JSON --> OC
    + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error/*** data:需要解析的NSData类型数据* opt:解析方式* error:错误信息*/
    • OC --> Json
    + (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对象*/

XML解析


  • 小文件解析(NSXMLParser)
    • 通过NSXMLParser解析XML文档,需要用到代理协议NSXMLParserDelegate
    • NSXMLParserDelegate协议的常用方法
    // 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
    *)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相关的几个类
      • GDataXMLDocument,整个XML文档
      • GDataXMLElement,XML文档中的一个元素
    • 解析步骤
    // 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的属性值,将其转化为字符串对象    */}

转载于:https://www.cnblogs.com/theDesertIslandOutOfTheWorld/p/4741895.html

你可能感兴趣的文章
jquery定义链接跳转的高亮显示
查看>>
CheckListBox怎样得到多选值?
查看>>
三道题(关于虚表指针位置/合成64位ID/利用栈实现四则运算)
查看>>
Vijos P1243 生产产品 (单调队列优化DP)
查看>>
mysql 数据表操作 目录
查看>>
iOS常用第三方库 -转
查看>>
Android布局学习
查看>>
jQuery中事件绑定与解绑
查看>>
js原生Ajax的封装与使用
查看>>
周总结6
查看>>
PostgreSQL 务实应用(二/5)插入冲突
查看>>
一种公众号回复关键词机制
查看>>
java多线程入门学习(一)
查看>>
基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
查看>>
nyist oj 138 找球号(二)(hash 表+位运算)
查看>>
Movidius软件手册阅读 2017-09-04
查看>>
ytu 1910:字符统计(水题)
查看>>
201671030110 姜佳宇 实验三作业互评与改进
查看>>
mysql-5.6.15 开启二进制文件
查看>>
python的沙盒环境--virtualenv
查看>>