OC中JSON和XML的解析

JSON

JSON是一种轻量级的数据格式,一般用于数据交互。服务器返回给客户端的数据一般都是JSON或者XML,当然除了下载文件。

JSON的格式很像OC中的字典和数组。

{"name": "jack", "age": 10}
{"names": ["jack", "rose", "jim"]}

标准的JSON格式key必须用双引号。要想从JSON中挖掘具体的数据,需要对JSON进行解析。JSON转换为OC数据类型:

在iOS中,JSON的常见解析方案有四种

  • 第三方库:JSONKit、SBJson、TouchJSON
  • 苹果自带:NSJSONSerialization(性能最好)

NSJSONSerialization的常见方法

  • JSON数据-OC对象

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

  • OC对象-JSON数据

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

XML

XML全称Extensible Markup Language。和JSON一样,也是常用的数据交互格式。一般称作XML文档。

XML的解析方式有两种:

  • DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
  • SAX:从根元素开始,按照顺序一个元素一个元素往下解析,比较适合解析大文件。

在iOS中,解析XML的手段有很多。苹果原生的有NSXMLParser。SAX方式解析,使用简单。第三方框架有libxml2和GDataXML。libxml2使用纯C语言。同时支持DOM和SAX方式解析。GDataXML支持DOM方式解析,是有Google开发的。解析小文件用GDataXML。

NSXMLParser的使用方法

// 传入XML数据,创建解析器
NSXMLParser *parser = [NSXMLParser alloc] initWithData:data];
// 设置代理,监听解析过程
parser.delegate = self;
// 开始解析
[parser parse];

NSXMLParser采取SAX方式解析,特点是事件驱动,下面的情况会通知代理。

  • 当扫描到文档(Document)的开始与结束
  • 当扫描到元素(Element)的开始与结束

当扫描到文档的开始时调用(开始解析)

- (void)parserDidStartDocument:(NSXMLParser *)parser

当扫描到文档的结束时调用(解析完毕)

- (void)parserDidEndDocument:(NSXMLParser *)parser

当扫描到元素的开始时调用(attributeDict存放着元素的属性)

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namaspaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;

当扫描到元素的结束时调用(attributeDict存放着元素的属性)

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

Comments