iOS高级编程之XML,JSON数据解析

时间:2022-06-07 23:54:53

解析的基本概念

所谓“解析”:从事先规定好的格式串中提取数据

解析的前提:提前约定好格式、数据提供方按照格式提供数据、数据获取方按照格式获取数据

iOS开发常见的解析:XML解析、JSON解析

一、XML数据结构

XML数据结构基本概念

XML:Extensible Markup language (可扩展标记语言),主流格式之一,可以用来存储和传输数据格式之一,可以用来存储和传输数据

XML数据格式的功能

1、数据交换

2、内容管理

3、用作配置文件

XML数据结构的语法

1、声明

2、节点使用一对标签表示

3、根节点是起始节点,只有一个。节点可以嵌套

4、节点可以有值,存储在一对标签中

iOS高级编程之XML,JSON数据解析

如何进行XML解析

有以下两种方法:

1、SAX解析

SAX:Simple API for XML .基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)

SAX解析XML,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,SAX解析器会检测整个XML树形结构,你的代码会控制它在哪里停止,使用哪些数据之类的事情。就是说,SAX可控制性强,占用内存小,适用于提取部分数据。当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理,如果XML格式在某一处出现错误,前面的数据会被提取出来,错误后面数据的就显示不出来。

NSXMLParse类是iOS自带的XML解析类。采用SAX方式解析数据

解析过程由NSXMLParserDelegate协议方法回调

解析过程:开始标签->取值->结束标签->取值

代码的实现过程是,首先我们建立一个XML文档,并引入文件,如下:

iOS高级编程之XML,JSON数据解析

其次我们建立一个表格试图控制器(TableViewController)

定义一个私有属性数组datasource用来存储模型数据和startTag属性用来暂存起始标签

iOS高级编程之XML,JSON数据解析

同时在方法ViewDidLoad里面获取文件数据并指定代理<NSXMLParserDelegate>//解析器协议,同时为对应的重用标识符注册单元格的类型

iOS高级编程之XML,JSON数据解析

NSXMLParserDelegate 解析器协议里面有如下方法:

iOS高级编程之XML,JSON数据解析

iOS高级编程之XML,JSON数据解析

当XML在逐个解析文件数据时,由于起始标签和结束标签名字一样,当解析到结束标签时,为了避免解析到的结束标签后面的内容将模型对象中的相应的属性覆盖,在解析结束标签的方法内部将起始标签置为nil

在每个方法内部我们同时打印了一下方法名,这样我们就可以在输出端清晰的看到方法的执行顺序,

同时在表格的设置方法内部建立重建机制

iOS高级编程之XML,JSON数据解析

在设置相应的行数和分区,我们就可以在模拟器上显示出如下结果:

iOS高级编程之XML,JSON数据解析

2、DOM工具解析

DOM:Document Object Model (文档对象模型)。解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。当文件内容出现错误时,在输入框内会标记出错误的位置

GDataXMLNode是Google提供的开元XML解析类,对libxml2.dylib进行了Objective-C的封装,因此在使用GDataXML之前,你需要先导入libxml2。

iOS中包含一个C语言的动态链接库libxml2.dylib,解析速度比NSXMLParser快

iOS高级编程之XML,JSON数据解析

二、JSON数据结构

JSON数据结构基本概念

Javascript Object Notation ,轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言,易于人阅读和便携,同时也易于及其解析何程,由于JSON解析便捷、快速,并且相同数据用JSON编辑所占的内存更小,所以在iOS中我们我们使用JSON解析更加普遍。

JSON文档有两种结构:对象 、数据

对象:以“{“开始,以”}”结束,是“名称/值”对儿的集合。名称和值中间用“:”隔开。多个“名称/值”对之间用“,”隔开。类似OC中的字典。

数组:以“["开始,以“]”结束,中间是数据。数据以“,”分割。

JSON中的数据类型:字符串、数值、BOOL、对象、数组。

例如:

iOS高级编程之XML,JSON数据解析

JSON – OC 转换对照表

iOS高级编程之XML,JSON数据解析

 JSON数据结构的功能

1、数据交换

2、内容管理

3、配置文件

JSON解析方案

在iOS中,JSON的常见解析方案有4种 
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)  
苹果原生(自带):NSJSONSerialization(性能最好)

iOS高级编程之XML,JSON数据解析

下面是NSJSONSerialization解析过程:

iOS高级编程之XML,JSON数据解析

iOS高级编程之XML,JSON数据解析的更多相关文章

  1. iOS开发笔记3:XML&sol;JSON数据解析

    这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...

  2. Silverlight项目笔记7&colon;xml&sol;json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

    1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...

  3. 关于iOS中几种第三方对XML&sol;JSON数据解析的使用

    Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...

  4. iOS开发——XML&sol;JSON数据解析

    NSJSONSerialization 接下来就正式开始.苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要 ...

  5. IOS高级编程之二:IOS的数据存储与IO

    一.应用程序沙盒 IOS应用程序职能在系统为该应用所分配的文件区域下读写文件,这个文件区域就是应用程序沙盒.所有的非代码文件如:图片.声音.映象等等都存放在此. 在mac中command+shift+ ...

  6. Java XML JSON 数据解析

    下面我们通过一段代码了解一下解析JSON格式数据的基本过程: 提示:使用JSON需要导入 JSON 相关的多个Jar文件 import net.sf.json.JSONObject; public c ...

  7. iOS - JSON 数据解析

     iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...

  8. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  9. iOS学习笔记(十一)——JSON数据解析

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

随机推荐

  1. Bootstrap学习笔记1

    Bootstrap在线手册 http://v3.bootcss.com,这里有详细的说明.参考.示例. Bootstrap为许多前端常用的功能都做了封装.预定义,可以直接使用. Bootstrap支持 ...

  2. Android 弹出框

    1.Java package com.fish.helloworld; import android.app.Activity; import android.app.AlertDialog; imp ...

  3. centos6&period;5安装配置zabbix3&period;0&period;3

    1.首先要准备LAMP环境. (1)安装php Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上 rpm ...

  4. Mapped Statements collection does not contain value for TaskMapper&period;selectByPrimaryKey

    Mapped Statements collection does not contain value for后面是什么类什么方法之类的: 错误原因有几种: 1.mapper.xml中没有加入name ...

  5. 一些tcp通讯代码

    1,nginx-lua 需要设置nginx配置文件 resolver 223.5.5.5 223.6.6.6; lua_package_path "/usr/local/nginx/conf ...

  6. Spring:(一)入门基础学习

    前述 因为前几日刚刚学完Spring的基础,因此写一篇博客整理一下相关的基础知识. 什么是Spring? Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,帮助分离项目组件之 ...

  7. windows环境下,spring boot服务使用docker打包成镜像并推送到云服务器私有仓库

    最近在淘宝上学习springcloud教程,其中有几节课是讲解讲本地springboot服务打包成镜像并推送到云服务器私有仓库,但是教程里面用的事Mac环境,我的是Windows环境,而且课程里面没有 ...

  8. timeStamp(时间戳) 事件属性

    Event 对象 定义和用法 timeStamp 事件属性可返回一个时间戳.指示发生事件的日期和时间(从 epoch 开始的毫秒数). epoch 是一个事件参考点.在这里,它是客户机启动的时间. 并 ...

  9. Golang 用go-sql-driver 调用MySQL存储过程时的问题排查

    今天在用go-sql-driver做MySQL driver调用MySQL的存储过程时遇到一个罕见的报错.本文对这个错误及其解做一个简单的总结. 1 问题描述 按照go中sql包提供的接口,应用层代码 ...

  10. 自建脚手架之配置中心--LightConf的实现

    常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置.redis地址配置.活动开关--等等.因此每次上线或者 ...