L与JSON数据结构解析工程

来源:互联网 发布:绵阳java程序员工资 编辑:程序博客网 时间:2024/06/05 15:36
////  RootViewController.m//  UI_Lesson_17////  Created by xalo on 15/9/24.//  Copyright All rights reserved.//#import "RootViewController.h"#import "GDataXMLNode.h"#import "JSONKit.h"#import "SBJSON.h"#import "CJSONDeserializer.h"@interface RootViewController ()<NSXMLParserDelegate>//使用NSXMLParser做XML解析时是基于协议回调的形式 所以要遵循NSXMLParserDelegate协议@end@implementation RootViewController- (void)viewDidLoad {    [super viewDidLoad];    //使用SDK类中的JSON解析类进行解析    //.app应用程序包mainBundle    NSString *JSONFilePath = [[NSBundle mainBundle]pathForResource:@"StudentInfo" ofType:@"json"];    NSString *JSONContent = [NSString stringWithContentsOfFile:JSONFilePath encoding:NSUTF8StringEncoding error:nil];    NSData *JSONData = [JSONContent dataUsingEncoding:NSUTF8StringEncoding];    NSArray *JSONResult = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableContainers error:nil];    NSLog( @"%@", JSONResult);    NSLog(@"%@", JSONFilePath);   //第三方<img src="http://img.blog.csdn.net/20151030154842253?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />//JSONKit//  NSArray *arrayJSON = [JSONContent objectFromJSONString];    NSArray *dataJSON = [JSONData objectFromJSONData];    for (int i = 0 ; i < [dataJSON count]; i ++) {        NSDictionary *item = [dataJSON objectAtIndex:i];        NSLog( @"arrayJSON %@", [item objectForKey:@"name"]);        NSLog( @"arrayJSON %@", [item objectForKey:@"age"]);        NSLog( @"arrayJSON %@", [item objectForKey:@"sex"]);    }//SBJSON    SBJsonParser *jsonparser = [[SBJsonParser alloc]init];    NSArray *jsonarray = [jsonparser objectWithString:JSONContent];    for (int i = 0 ; i < [jsonarray count]; i ++) {        NSDictionary *item = [ jsonarray objectAtIndex:i];        NSLog( @"jsonarray %@", [item objectForKey:@"name"]);        NSLog( @"jsonarray %@", [item objectForKey:@"age"]);        NSLog( @"jsonarray %@", [item objectForKey:@"sex"]);    }    //touchJSON    NSArray *jsonArr = [[CJSONDeserializer deserializer]deserializeAsArray:JSONData error:nil];    for (NSDictionary *obj in jsonArr) {        NSLog( @"%@ %@ %@",[obj objectForKey:@"name"], [obj objectForKey: @"age"], [obj objectForKey: @"sex"]);    }    // Do any additional setup after loading the view.    NSString *XMLFilePath = [[NSBundle mainBundle]pathForResource:@"StudentInfo" ofType:@"xml"];    ////    获取文件内容    NSString *XMLContent = [NSString stringWithContentsOfFile:XMLFilePath encoding:NSUTF8StringEncoding error:nil];    //    文件内容转化为二进制格式    NSData *XMLData = [XMLContent dataUsingEncoding:NSUTF8StringEncoding];    //DOM解析    //1.生成xml文件对象    GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:XMLData options:0 error:nil];    //2. 获取根节点对象    GDataXMLElement *rooeElement = [document rootElement];    //3.获取子节点    NSArray *subElements = [rooeElement elementsForName: @"student"];    //4.通过forin来得到每个student节点对象    for (GDataXMLElement *oneElement in subElements) {        NSString *name = [[[oneElement elementsForName: @"name"]firstObject]stringValue];        NSInteger age = [[[[oneElement elementsForName: @"age"]firstObject]stringValue ] integerValue];        NSString *sex = [[[oneElement elementsForName: @"sex"]firstObject] stringValue];        NSLog( @"name%@  age%ld sex%@", name, age, sex);    }    //5.释放document所有权    [document release]; /*  //XML  SAX  工具解析  SAX:Simple API for XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)逐行执行    //创建XML解析器对象    //获取文件路径    NSString *XMLFilePath = [[NSBundle mainBundle]pathForResource:@"StudentInfo" ofType:@"xml"];////    获取文件内容    NSString *XMLContent = [NSString stringWithContentsOfFile:XMLFilePath encoding:NSUTF8StringEncoding error:nil];//    文件内容转化为二进制格式    NSData *XMLData = [XMLContent dataUsingEncoding:NSUTF8StringEncoding];//    NSData *XMLData = [[NSData alloc]initWithContentsOfFile:XMLFilePath];    //创建XML解析器    NSXMLParser *XMLParser = [[NSXMLParser alloc]initWithData:XMLData];    //为解析器指定代理对象    XMLParser.delegate = self;    //给解析器对象发送parse消息 开始解析XML数据    [XMLParser parse];    [XMLParser release];}#pragma  mark - NSXMLParser Delegate -//协议方法  解析器开始解析- (void)parserDidStartDocument:(NSXMLParser *)parser{    //在解析器开始解析的时候会响应此协议 来通知代理对象解析开始    NSLog( @"%s", __FUNCTION__);}//协议方法 解析- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{    NSLog( @"start element -> %@", elementName);//找到元素名称//    NSLog( @"namespace -> %@", namespaceURI);//命名空间标志//    NSLog( @"qualified -> %@", qName);//描述名称//    NSLog( @"attributes -> %@", attributeDict);//属性字典    NSLog( @">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");  */}//协议方法  完成解析- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{    NSLog (@"end element -> %@", elementName);//找到结束标签    NSLog( @"--------------------------------------------");}//协议方法 找到对应节点值- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    NSLog( @"value - > %@", string);    NSLog( @"............................................");}//协议方法  解析器结束- (void)parserDidEndDocument:(NSXMLParser *)parser{    NSLog( @"%s" , __FUNCTION__);}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    // Get the new view controller using [segue destinationViewController].    // Pass the selected object to the new view controller.}*/@end

0 0