zoukankan      html  css  js  c++  java
  • ios之json,xml解析

    JSON解析步骤:

    1.获取json文件路径

    NSString*path = [[NSBundle mainBundle] pathForResource:@"Teacher"ofType:@"json"];

    2.读取文件中的data

    NSData *data = [NSData dataWithContentsOfFile:path];

    3.把data转化为可变数组或者可变字典 是字典还是数组要看json最外层数据是什么.NSJSONSerialization是重点

    NSError *error = nil;
    NSMutableArray*dataArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainerserror:&error];
    使用JSONKit解析JSON
    JSONKit是外部类目 需要导入
    首 先导入头文件 JSONKit中有objectFromJSONData方法 这个方法是里添加了各种类目 类目的作用是 一个UIData类型的对象 调用该方法后 会返回一个你里面是什么容器 返回就是什么容器的对象 调用之后返回的是一个数组类型的对象 而这个数组中存放的就是json文件中的内容
    xml解析文件
    SAX逐行解析数据 (采用协议回调机制)
    解析过程由
    NSXMLParserDelegate协议⽅方法回调

    解析过程:开始标签->取值->结束标签->取值
    思考:1.从什么位置初始化装model得数组
        2.从什么位置初始化model 从什么位置可以拿出数据
        3.从什么位置给model赋值
        4.从什么位置可以打印到数组
    - (void)parserDidStartDocument:(NSXMLParser *)parser
    {
        // 初始化数组
        self.dataArray = [NSMutableArray array];
        NSLog(@"已经开始分析文件");
    }
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {
        // 初始化model
    
        if ([elementName isEqualToString:@"Student"]) {
            self.model = [[StudentModel alloc] init];
        }
        NSLog(@"<%@>", elementName);
        // NSLog(@"开始遇到节点");
    }
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
        // 保存字符串
        self.string = string;
        //NSLog(@"发现字符");
        NSLog(@"%@", string);
    }
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {
    // 给model赋值
        if ([elementName isEqualToString:@"name"]) {
            self.model.name = self.string;
        } else if ([elementName isEqualToString:@"gender"]) {
            self.model.gender = self.string;
        } else if ([elementName isEqualToString:@"age"]) {
            self.model.age = self.string;
        } else if ([elementName isEqualToString:@"motto"]) {
            self.model.motto = self.string;
        } else if ([elementName isEqual;ldghToString:@"Student"]) {
            // 节点名字等于Student的时候一个model就赋值完成了 可以装进数组中
            [self.dataArray addObject:self.model];
        [_model release];
      }
        NSLog(@"遇到结束节点触发");
        NSLog(@"</%@>", elementName);
    }
    - (void)parserDidEndDocument:(NSXMLParser *)parser
    {
        NSLog(@"%@", self.dataArray);
        NSLog(@"已经结束分析文件");
    }
    现在一般多使用json解析.
  • 相关阅读:
    经典滤波器设计
    算法学习专栏简介
    算法学习专栏简介
    压缩感知及实验分析
    压缩感知及实验分析
    《数学之美》之谈谈搜索引擎反作弊与权威性问题
    《数学之美》之谈谈搜索引擎反作弊与权威性问题
    查找searching
    查找searching
    《数学之美》之谈谈密码学
  • 原文地址:https://www.cnblogs.com/pp123/p/4820478.html
Copyright © 2011-2022 走看看