数据交互格式


  • 服务器返回给用户的数据,通常是以下两种方式:

    • 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
    1. + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error
    2. /**
    3. * data:需要解析的NSData类型数据
    4. * opt:解析方式
    5. * error:错误信息
    6. */
    • OC --> Json
    1. + (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error
    2. /**
    3. * obj:需要转换的OC对象
    4. * opt:解析方式
    5. * error:错误信息
    6. */
  • 解析NSString

    1. NSString *json = "I am a coder";
    2. [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil]
    3. /**
    4. * JSON解析的数据通常是使用NSUTF8StringEncoding编码的NSData类型数据
    5. * options:指定可以解析的类型,NSJSONReadingAllowFragments表示可以解析 NSString对象
    6. * error:返回解析错误信息
    7. * 返回值为解析完成的NSString对象
    8. */
  • 解析NSDictionary与NSArray(来自服务器的数据)

    1. /**Block的方式发送请求*/
    2. //创建请求对象
    3. NSURLRequest *request = [NSURLRequest requestWithURL:(此处为请求路径)];
    4. //发送请求
    5. [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    6. NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    7. }];
    8. /**
    9. * queue:请求任务所在的队列
    10. * completionHandler:请求完成回调的Block
    11. * response:服务器的响应信息
    12. * data:服务器返回的数据
    13. * error:错误信息
    14. * 将data解析成对应的NSDictionary对象
    15. */

XML解析


  • 小文件解析(NSXMLParser)

    • 通过NSXMLParser解析XML文档,需要用到代理协议NSXMLParserDelegate
    • NSXMLParserDelegate协议的常用方法
    1. // 1. 开始解析XML文档的时候调用
    2. - (void)parserDidStartDocument:(NSXMLParser *)parser
    3. // 2. 解析到XML文档中某个元素的开始的时候调用,解析任务的核心
    4. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict
    5. /**
    6. * elementName:正在解析的元素的名字
    7. * attributeDict:解析生成的OC对象
    8. */
    9. // 3. 解析到XML文档中某个元素的结束的时候调用
    10. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
    11. // 4. 解析到XML文档结尾的时候调用
    12. - (void)parserDidEndDocument:(NSXMLParser *)parser
    • 解析步骤
    1. // 1. 创建解析器
    2. NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    3. // 2. 设置代理
    4. parser.delegate = self;
    5. // 3. 启动解析器
    6. [parser parse];
    7. // 4. 在代理方法中完成具体的解析任务
  • 大文件解析(GDataXML)

    • 与GDataXML相关的几个类

      • GDataXMLDocument,整个XML文档
      • GDataXMLElement,XML文档中的一个元素
    • 解析步骤
    1. // 1. 将XML文档数据,转换成GDataXMLDocument类型的对象
    2. GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
    3. // 2. 获取GDataXMLDocument对象中根节点的所有元素
    4. NSArray *elements = [document.rootElement elementsForName:@"此处为元素的名字"];
    5. /**
    6. * 获取XML文档中指定名字的所有元素
    7. */
    8. // 3. 解析每个元素中的数据
    9. for (GDataXMLElement *ele in elements)
    10. {
    11. [ele attributeForName:@"此处为元素中的Key"].stringValue;
    12. /**
    13. * 解析元素ele中键值为Key的属性值,将其转化为字符串对象
    14. */
    15. }

iOS网络-02-数据解析(JSON与XML)的更多相关文章

  1. ios网络_json数据解析

    网络上数据传输以json或者xml格式. json是字典 或者 数组 或者字典跟数组嵌套的形式.解析json就是把json反序列化(解析)---把json转换为oc对象.json序列化就是把oc对象转 ...

  2. OC - 13.数据解析(JSON与XML)

    ##数据交互格式 服务器返回给用户的数据,通常是以下两种方式: JSON XML JSON 一种轻量级的数据数据格式,体积比XML小,是服务器返回给移动端通常采用的格式 用使用JSON文件中的数据,需 ...

  3. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. C#解析json和xml数据

    C#解析json和xml数据 // 用到的包using Newtonsoft.Json; // using Newtonsoft.Json.Linq; const string value = &qu ...

  6. Ajax--PHP+JQuery+Ajax解析json、XML数据、加载页面

    一.JQuery+Ajax用get.post方式提交和请求数据 知识要点: $('#userName').blur(function () { var txt = $(this).val(); $.a ...

  7. Java数据解析---JSON

    一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...

  8. iOS多线程与网络开发之解析json数据

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...

  9. IOS数据解析JSON

    //非原创 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSO ...

随机推荐

  1. 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...

  2. [Python] Create a Django project in Pycharm

    From: http://blog.csdn.net/u013088062/article/details/50158239 From: http://blog.csdn.net/u013088062 ...

  3. 程序代码记Log

    private static object s_lock = new object(); public static void TraceLog(string message, string logF ...

  4. 第一个sprint心得及感想

    经过两个星期的努力,第一个周期的任务终于完成,通过这次团队协作,学到了很多东西,首先是把任务细分化,把大的任务分为每天完成,然后团队个人都有自己的任务份额,这样子就不会全压在一个人身上.还有就是学会了 ...

  5. Winform开发框架之权限管理系统改进的经验总结(2)-用户选择界面的设计

    在上篇总结随笔<Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用>介绍了权限管理模块的用户管理部分,其中主要介绍了其中的用户所属公司 ...

  6. Python入门笔记(20):Python函数(3):关于lambda

    一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的.如下: """命名的foo函数&q ...

  7. 百度地图js根据经纬度定位和拖动定位点

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  8. windbg学习进阶之——windbg字段名及其意义

    要使用windbg分析dump必须加载正确的符号,可以通过设置Symbols File Path为"D:/Symbols;SRV*D:/Symbols*http://msdl.microso ...

  9. Win7如何部署apache服务器(包括SSL设置)

    部署普通站点 1.首先下载apache24版本,下载地址为http://pan.baidu.com/s/1pLmvDgB; 2.解压到你的电脑本地目录,如D:\Apache24(下文配置都会以当前目录 ...

  10. Chrome使用技巧(几个月的心得)

    转用Chrome,不仅仅因为它的插件之丰富,更因为它的响应速度其他浏览器都望尘莫及.接着我就要写写一些心得. 如何最简易地用上谷歌搜索? 1,下载hosts文件:https://pan.baidu.c ...