L与JSON数据结构解析工程

//
//  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="https://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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值