iOS网络数据解析

iOS开发过程中,网络数据的传输过程一般是:客户端发送请求给服务器,服务器接收到客户端发送的网络请求后返回相应的数据。此时客户端需要把服务器返回的数据转化为前段和移动端开发中使用的数据格式(如OC/java)。后台服务器一般使用php、java、.net进行开发,而前段和移动端使用的一般是OC/JAVA/HTML/CSS/JS,做好前后端的数据交互极为重要,如今数据交互常用的就是JSON和XML。下面就iOS开发过程中的JSON解析和XML解析进行简单的说明。

一、JSON解析

JSON是一种轻量级的数据格式,一般用于数据交互。JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用来给HTML增加动态功能(此处的 javascript和java没有半毛钱的关系!)

在iOS中,常见的JSON数据解析方案有4种:

第三方框架: SBJson ,JSONKit, TouchJson.性能从左到右,依次变差.(iOS 5(2011年)以前)

苹果原生(自带):NSJSONSerialization (性能是最好的.iOS5以后推出).

苹果原生的JSON解析工具封装的效果很好,用起来也很方便,下面简要的介绍一下JSON的解析方法。

<1>反序列化(解析):

将从服务器接收到的JSON数据(二进制数据)转换成OC数据类型(NSArray,NSDictionary等.)的过程.

目的: JSON数据 --> OC对象; 得到数据字典或者数据数组

好处: 简化程序的开发,方便后续的字典转模型.

方法:

+(id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

<2>序列化:

将数组或者字典发送给服务器之前,转换成二进制数据.

目的:OC对象 --> JSON数据;得到二进制JSON数据 NSData.

好处:方便网络传输,提高传输速度.

方法:

+(NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

此时需要注意在做序列化之前,一定使用 isValidJSONObject 检测一下要序列化的对象,是否能够正确被序列化

还有就是如果后台返回的json数据有误,比如两侧的{}或者[]没有加上,我们要通过代码实现,下面列出实现思路,就不上代码了。

具体思路: 1.发送网络请求 2.用字符串接收JSON数据 3.将JSON格式标准化 4.将标准化之后的JSON字符串转换成二进制数据 5.将标准的JSON二进制数据转化为OC数据

二、解析XML数据

XML 全称是Extensible Markup Language,译作“可扩展标记语言

XML特征:

1、 XML是一种标记语言,很类似HTML

2、XML的设计宗旨是传输数据,而非显示数据

3、XML标签没有被预定义。您需要自行定义标签。

4、XML被设计为具有自我描述性。

5、XML是W3C的推荐标准

XML是独立于软件和硬件的信息传输工具。 目前,XML在Web中起到的作用不会亚于一直作为 Web 基石的 HTML。 XML无所不在。XML是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。

XML解析三种方式

DOM

通用性强,它会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据;

简单直观,但需要将文档读取到内存,并不太适合移动设备;

SAX、PULL解析

SAX采用事件驱动,它并不需要解析整个文档;PULL(用于java解析),是Android自带的XML解析器,和SAX基本类似,也是事件驱动,不同的是PULL事件返回的是数值型。

他们的区别为:SAX解析器的工作方式是自动将事件推入注册的事件处理器进行处理,因此你不能控制事件的处理主动结束;而Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。这是他们主要的区别。如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式或DOM方式会对整个文档进行解析,中间不能终止暂停,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。使用PULL方式正合适。

下面就iOS开发中的XML解析举个例子:

//NSXMLParserDelegate

// 1. 实例化 XML 的 SAX 解析器!

          NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];         

            // 2. 设置解析器代理.

delegate = self;
            // 3. 开始解析 XML 文档

            // 一旦调用了下面的开始解析方法,就会自动调用代理方法,解析 XML 文档!

            [parser parse];

 #pragma NSXMLParserDelegate

- (void)parserDidStartDocument:(NSXMLParser *)parser

{
   NSLog(@"1.XML文档解析开始!");
}
// 开始解析元素的时候就会调用!XML文档中有多少个元素就会调用多个次!

// elementName:元素名称!

// attributeDict:属性字典!当前元素对应的属性字典!

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict

{
    NSLog(@"2.开始解析:%@元素,元素属性是:%@",elementName,attributeDict);  

    // 判断:只有元素 vedio 的属性字典是需要的内容!  

    if ([elementName isEqualToString:@"vedio"]) {    

        // 字典转模型

        CZVideo *video = [CZVideo videoWithDict:attributeDict];

        // 添加到数据源中

        [self.videos addObject:video];

    }

}

// 发现元素内容的时候就会调用!

// string :元素内容!

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

    NSLog(@"3.发现元素内容:%@",string);

}

// 元素解析结束的时候就会调用,XML文档中有多少个元素就会调用多个次!

// elementName :元素名称

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{
    NSLog(@"4.元素%@解析结束",elementName);
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"5.XML文档解析结束!");
}
时间: 2024-08-19 02:37:52

iOS网络数据解析的相关文章

iOS网络数据解析之XML解析-GDataXML

GDataXML 第三方xml解析框架 DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件 GDataXML中常用的类 GDataXMLDocument: 代表整个XML文档 GDataXMLElement: 代表文档中的每个元素 使用attributeForName:方法可以获得属性值 要使用GDataXML,先要对项目进行一些配置.1>导入libxml2动态库targets--Build Phases--link Binary With Libraries 2>设置libxm

iOS网络数据下载和JSON解析

iOS网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍iOS中如何利用NSURLConnection如何从网络中下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点: 1.NSURLConnection异步下载和封装 #import "ZJHttpRequest.h" //消除performSelector的警告 #pragma clang diagnostic ignored "-Warc-performSelec

iOS 网络数据之XML解析

<pre name="code" class="objc"><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size:14px;"><span style="background-color: rgb(255, 255, 255);"></span>

ios 网络数据下载和JSON解析

ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示 涉及到得知识: 1.NSURLConnection异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 (1)什么是网络应用? 一般情况下, iPhone的计算机, 照相机不需要从网络上下载数据也能运行, 所以这

ios json数据解析

刚刚下午那会 弄了个 解析 xml  demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单,这个时候就犹豫了,要不写到博客上来 ? 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟刚开始学习IOS开发方面的知识,就当是巩固了撒! 还是 先看个效果图吧,如下! 接下来 看下工程目录吧,其实并没有必要,直接建立一个工程就行 ,算了,还是贴上来吧,如下: 工程目录中有个 Notes.json 文件,该文件就是 要解析的json数据了 ,也截下

iOS开发之网络数据解析(二)--XML解析简介

前言:本篇随笔介绍的是XML解析. 正文: 1.XML解析方式有2两种: DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件 SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件 2.IOS中XML解析方案有很多种: 2-1.第三方框架: libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX解析 GDataXML:DOM方式解析,由Google开发,基于libxml2 2-2.苹果原生 NSXMLParser:SAX方式解析,使用简单

iOS网络编程解析协议三:JSON数据传输解析

作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式 基于JavaScript的一个子集 易读性略差,编码手写难度大,数据量小 JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中 作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式 从iOS 5开始,使用NSJSONSerialization对JSON解析 其他常见的三种JSON解析第三方库:SBJso

iOS网络编程解析协议二:XML数据传输解析

XML两种解析方式,一种是SAX,NSXMLParser是SAX方法解析,另一种是DOM(Document Object Model); 区别: SAX: 只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快 常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台 从文档的开始通过每一节点移动,定位一个特定的节点 DOM: 不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档 一般应用与小型的配置XML,方便操作 为载入到内存的文档节点建立类型描述,呈

android基础(六)网络数据解析方法

在网络上传输数据时最常用的方法有两种:XML和JSON,下面就对这两种类型的数据解析进行讲解. 一.XML数据解析 在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析器. (1)SAX解析 SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器