JSON

iOS进阶学习-网络之数据解析

字号+ 作者:H5之家 来源:H5之家 2016-05-14 15:00 我要评论( )

一、解析的基本概念 二、XML数据结构 三、进行XML数据结构解析时使用到的SAX工具,DOM工具 1、SAX工具: #pragma mark - sax解析XML文件- (IBAction)saxParserActionXMLDocument:(UIButton *)sender {// 1.获取文件路径NSString *path = [[NSBundle mainBund

一、解析的基本概念

二、XML数据结构

三、进行XML数据结构解析时使用到的SAX工具,DOM工具

  1、SAX工具:

#pragma mark - sax解析XML文件 - (IBAction)saxParserActionXMLDocument:(UIButton *)sender { // 1.获取文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentsInfo_XML" ofType:@"txt"]; // 2.获取出NSData类型的数据 NSData *data = [NSData dataWithContentsOfFile:path];// 3.设置SAX解析,并关联相关的xml文件 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 4.设置代理 parser.delegate = self; // 5.开始解析 [parser parse]; }

  • NSXMLParserDelegate的协议方法:
  • #pragma mark - NSXMLParserDelegate的协议方法 // 1.文档解析(报告解析的开始) - (void)parserDidStartDocument:(NSXMLParser *)parser{ // 初始化存储数据的数组 self.dataArray = [[NSMutableArray alloc] init]; } // 2.发现标签开始的处理函数(即报告元素的开始以及元素的属性) - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { // 根据需求需要的标签去获取相关的数据 if ([elementName isEqualToString:@"student"]) { Student *stu = [[Student alloc] init]; // 将数据对象添加到数组中 [self.dataArray addObject:stu]; } // 将当前的标签值传给记录标签的属性 self.currentElement = elementName; } // 3.解析标签中的内容,然后赋值给对象 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ // 从数组中取出相关的student对象,每次从数组中取最后一个元素,保证每次取出最新的对象内容 Student *stu = [self.dataArray lastObject]; // KVC赋值 [stu setValue:string forKey:self.currentElement]; } // 4.结束标签 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { self.currentElement = nil; } // 5.结束文档解析(报告解析的结束) - (void)parserDidEndDocument:(NSXMLParser *)parser { for (Student *stu in self.dataArray) { NSLog(@"name = %@, gender = %@, age = %ld, hobby = %@", stu.name, stu.gender, stu.age, stu.hobby); } } // 6.错误处理 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"error = %@", parseError); }

      2、DOM工具

    #pragma mark - dom解析XML文件 - (IBAction)domParserActionXMLDocument:(id)sender { // 首先引入动态库 // 1.获取文件的路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentsInfo_XML" ofType:@"txt"]; // 2.获取出NSData类型的数据 NSData *data = [NSData dataWithContentsOfFile:path]; // 初始化存储数据的数组 self.dataArray = [[NSMutableArray alloc] init]; // 3.设置DOM解析(创建解析文档) GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; // 4.获取根节点 GDataXMLElement *rootElement = document.rootElement; // 5.遍历获取相对应的子节点 for (GDataXMLElement *studentElement in rootElement.children) { Student *stu = [[Student alloc] init]; // 遍历获取子节点的子节点 for (GDataXMLElement *stuElement in studentElement.children) { NSLog(@"stuElement = %@", stuElement); // 根据标签给student对象赋值 // stuElement.name 标签的名字 // stuElement.stringValue 标签的值 [stu setValue:stuElement.stringValue forKey:stuElement.name]; } [self.dataArray addObject:stu]; } for (Student *stu in self.dataArray) { NSLog(@"name = %@, gender = %@, age = %ld, hobby = %@", stu.name, stu.gender, stu.age, stu.hobby); } }

    四、JSON数据结构

      1、JSON数据结构的概念:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,易于阅读和编写,同时也易于机器解析和生成。这些特性使JSON成为理想的数据交换语言。

      2、JSON文件有两种结构:

    五、进行JSON数据结构解析时使用到的第三方框架以及系统方法

      1、系统方法解析JSON数据:

    #pragma mark - 系统自带的JSON数据解析 - (IBAction)foundationParserActionJSONDocument:(id)sender { // 1.获取文件的路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentInfo_json" ofType:@"txt"]; // 2.获取出NSData类型的数据 NSData *data = [NSData dataWithContentsOfFile:path]; // 初始化存储数据的数组 self.dataArray = [[NSMutableArray alloc] init]; // 3.解析数据 NSArray *resultArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; // 4.遍历数组,使用KVC给对象赋值 for (NSDictionary *dict in resultArray) { Student *stu = [[Student alloc] init]; [stu setValuesForKeysWithDictionary:dict]; [self.dataArray addObject:stu]; } for (Student *stu in self.dataArray) { NSLog(@"name = %@, gender = %@, age = %ld, hobby = %@", stu.name, stu.gender, stu.age, stu.hobby); } }

      2、使用JSONKit解析json数据:先引入第三方框架JSONKit.h/m文件,按照上面的步骤将非ARC文件在ARC工程下使用。

    #pragma mark - 使用JSONKit解析json数据 - (IBAction)jsonKitParserActionJSONDocument:(id)sender { // 1.获取文件的路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentInfo_json" ofType:@"txt"]; // 2.获取出NSData类型的数据 NSData *data = [NSData dataWithContentsOfFile:path]; // 初始化存储数据的数组 self.dataArray = [[NSMutableArray alloc] init]; // 3.解析数据 NSArray *resultArray = [data objectFromJSONData]; // 4.遍历数组,取出其中的字典,然后使用KVC给对象赋值 for (NSDictionary *dict in resultArray) { Student *stu = [[Student alloc] init]; [stu setValuesForKeysWithDictionary:dict]; [self.dataArray addObject:stu]; } for (Student *stu in self.dataArray) { NSLog(@"name = %@, gender = %@, age = %ld, hobby = %@", stu.name, stu.gender, stu.age, stu.hobby); } }

    六、XML与JSON两种数据结构的优缺点

      1、XML优缺点:

      2、JSON优缺点:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 如何获取JQUERY AJAX返回的JSON结果集实现代码

      如何获取JQUERY AJAX返回的JSON结果集实现代码

      2016-05-14 14:05

    • 如何解决JQuery ajaxSubmit提交中文乱码

      如何解决JQuery ajaxSubmit提交中文乱码

      2016-05-14 11:01

    • 新型Infostealer木马使用Fiddler代理和Json.NET

      新型Infostealer木马使用Fiddler代理和Json.NET

      2016-05-12 11:03

    • Python Logging模块学习-详解与使用

      Python Logging模块学习-详解与使用

      2016-05-03 12:00

    网友点评