数据交互格式


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

    • 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<NSString *, NSString *> *)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的属性值,将其转化为字符串对象
    */
    }

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. 整合ssh model $$_javassist_13 cannot be cast to javassist.util.proxy.Proxy

    经goole stackoverflow 发现是 javassit 包冲突 项目使用的是maven 检查依赖包

  2. TypeScript札记:初体验

    1.简介 TypeScript 是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程. TypeScript是一种 ...

  3. 在eclipse中配置python插件

    最好离线下载python的离线包.名字叫——org.python.pydev.feature-1.6.3.2010100513 此包里面有两个文件夹 features 和 plugins,分别把2包中 ...

  4. 一、HTTPServer,RequestHandler,ServerHandler,Handler

    1.      HTTPServer,RequestHandler,ServerHandler,Handler 1.1       基本概念 HTTPServer主要是对传输控制层HTTP,TCP,S ...

  5. 【转】Python中的GIL、多进程和多线程

    转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...

  6. SCRUM:第一天任务实现情况

    我认领了我们团队“广商百货”应用平台的密码提示功能,任务暂时还在进行中.虽然建立了数据库,但是数据库里要存放什么数据,我们的小组还在讨论中.因为android的知识还在自学过程中,所以做起来比较慢,也 ...

  7. spring.Net之Ioc在MVC中的使用

    1.引入dll Common.Logging.dll Spring.Core.dll Spring.Web.dll Spring.Web.Extensions.dll Spring.Web.Mvc4. ...

  8. ANT自动打包U3D安卓项目研究笔记

    概述 因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务.在此将研究过程及一些相关知识整理记录在此. 本 ...

  9. 若干道Swift面试题

    1,说说你认识的Swift是什么?Swift是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序. ...

  10. VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案

    今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库&qu ...