iOS开发——XML/JSON数据解析

Posted Cocoa开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发——XML/JSON数据解析相关的知识,希望对你有一定的参考价值。


本文授权转载:神兽gcc()


除了XML和Json,文中还涉及到的一些知识:第三方类库的使用,获取本地文件内容,网站API使用,GCD多线程编程,不做详细介绍,在代码出现的地方会注明。


先安利一波:



大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式。一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特定的数据结构,必须对其进行解析,得到我们可以处理的数据。所谓“解析”,就是从事先规定好的格式串中提取数据。解析的前提是数据的提供方与获取方提前约定好格式,数据提供方按照格式提供数据,数据获取方按照格式获取数据。


ios开发中,几乎只要是与网络相关的应用,都离不开对网络数据的解析与应用。现总结几种常用方式来解析网络数据:


  • Json格式:

  • NSJSONSerialization,官方提供的Json数据格式解析类,iOS5以后支持

  • JSONKit(第三方类库)

  • SBJson

  • TouchJson

  • XML格式:

  • NSXMLParse,官方自带

  • GDataXML,Google提供的开元XML解析库


按照目前的发展,Json正在逐步取代XML成为网络数据的通用格式,所以我们重点来看Json格式的数据解析先。


准备工作


在看如何使用Json和XML之前,我们还有些事情要做,一是准备我们要解析的数据,二是搭建一个界面来看实际效果,毕竟我们解析了数据就是要在应用中展示出来的。


Json数据准备


关于如何获取网络的数据在这里就不多赘述了,你只需要获得一个从网站为开发者提供的API接口中获得我们想要的url就好了。我这里调用了豆瓣电影的API,随便选了在豆瓣电影首页的电影——《前任2:备胎反击战》,来看看豆瓣对这部电影的描述,由于标签太多,我这里只打算从中获取电影名称,体裁和剧情简介三部分打印出来。


我们可以先提前在浏览器中打开看一下这个待会我们将要得到的东西:

是不是很乱。。。没错,网站返回的东西虽然看上去好像有点规律,但是还是难以辨别,这里不用担心,我们可以使用一个叫做的东西来优化一下它的显示,这里有一个在线的。我们把网站返回给我们的数据copy到这里,点击校验,如果没有什么问题的话,为了方便展示,我把它copy到了Sublime中,我们看一下结果你会发现它变成了下面这个样子,这样看起来就舒服多了,我们也可以非常清楚地看到每一对“Key——Velue”对,以及每个Velue的类型,弄清楚了,待会儿方便我们查询和显示。

iOS开发——XML/JSON数据解析

找到了目标,下一步我们先做个界面的模子出来,展示我们解析过的数据。大概就是下面这个样子,点击不同的按钮,可以以不同的方式解析获得的数据并在TextView中打印。

iOS开发——XML/JSON数据解析

界面搭好之后不要忘了关联到代码。

iOS开发——XML/JSON数据解析

XML数据准备


我们在项目中新建一个xml文件,编写其中的内容,待会儿解析内容并打印到TextView。

iOS开发——XML/JSON数据解析

XML内容为Person,有几个学生的信息,包括学号,姓名,性别和年龄,一会儿根据这些创建模型。

iOS开发——XML/JSON数据解析

NSJSONSerialization


接下来就正式开始。苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂。


首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要加载一个NSURL对象,来向网站提交一个Request。到这里需要特别注意了,iOS9的时代已经来临,我们先前在旧版本中使用的某些类或者方法都已经被苹果官方弃用了。刚刚我们向网站提交了一个Request,在以往,我们是通过NSURLConnection中的sendSynchronousRequest方法来接受网站返回的Response的,但是在iOS9中,它已经不再使用了。从官方文档中,我们追根溯源,找到了它的替代品——NSURLSession类。这个类是iOS7中新的网络接口,苹果力推之,并且现在用它完全替代了NSURLConnection。关于它的具体用法,还是蛮简单的,直接上代码(ViewController.m文件):


(c)2006-2024 SYSTEM All Rights Reserved IT常识