iOS开发

iOS-XML/JSON解析

2019-10-23  本文已影响0人  inyourface


一、XML解析

XML解析有两种方式:

        DOM:一次性将整个XML文档加载进内存,比较适合解析小文件;

        SAX:从根元素开始,按顺序一个元素一个元素的向下解析,适合大文件;


二、XML解析框架

原生框架:NSXMLParser:SAX解析方式

第三方框架:libxml2:支持DOM和SAX方式

                     GDataXML:DOM方式解析,基于libxml2

大文件:NSXMLParser、libxml2

小文件:GDataXML、NSXMLParser、libxml2

三、解析


SAX解析:实现<NSXMLPaserDelegate>

1.解析数据(反序列化)

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

 parser.delegate = self;

// 开始解析: parse方法是 阻塞的, 只有把解析完,才会 调用reloadData

[parser parse];

2.实现代理方法

// 开始解析

- (void)parserDidStartDocument:(NSXMLParser *)parser{ };

// 开始解析某个元素

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<nsstring nsstring=""> *)attributeDict{ }

// 某个元素解析完毕

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

// 结束解析

- (void)parserDidEndDocument:(NSXMLParser *)parser{  }

DOM解析:(GDataXMLDocument)

1.配置工作:

        (1)导入GDataXML文件。

2.解析数据(反序列化)

   2.1加载整个xml文档

 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:kNilOptions error:nil];

     2.2 XML文档的根元素. 拿到根元素内部的 所有名称为video的子孙元素

NSArray *eles = [doc.rootElement elementsForName:@"video"];

     2.3 遍历操作子元素,拿到子元素中的属性

        for(GDataXMLElement *ele in eles)


一、JSON解析

苹果原生:NSJSONSerialization

第三方库:SBJSON、JSONKit、MJExtension

序列化:OC对象-->JSON/XML

反序列化:JSON/XML-->OC对象

二、解析


原生:

JSON数据 —> OC对象

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

OC对象 —> JSON数据

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

OC对象是否可转

+ (BOOL)isValidJSONObject:(id)obj

JSONObjectWithData返回类型是id,可以用字典、数组接收,通过字典对应key访问数据

字典转JSON、JSON转字典、JSON转数组

上一篇 下一篇

猜你喜欢

热点阅读