• IOS 请求数据解析 XML 和 JSON


    好久没写文章了,回忆一下以前的内容记录一下吧。

    这一段主要接触的就是数据解析,就说一下数据解析
    现在数据解析一般解析两种数据 xml 和 JSON
    那就从xml解析说起吧
    xml解析需要用到一个类 NSXMLParser  以及一个协议 NSXMLParserDelegate
    首先NSXMLParser是一个 xml 解析器 

    要解析数据首先创建一个xml解析器

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

     其中data就是我们要解析的数据


     然后执行解析就行  [XMLParser parse];
     执行解析时就会回调以下协议中的几个方法
     
     #pragma mark NSXMLParserdelegate---
    //开始解析文档
    - (void)parserDidStartDocument:(NSXMLParser *)parser
    {
    //文档开始解析的时候调用,在这里可以初始化一些东西
    }

    //解析文档结束
    - (void)parserDidEndDocument:(NSXMLParser *)parser
    {
    //文档解析完成时调用,这里可以写解析完成后的操作
    }

    //标签解析开始
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {    
    //标签开始解析,其中elementName就是开始标签的名称
    }

    //标签解析结束
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {
    //标签开始解析,其中elementName就是结束标签的名称,
    //在这里你可以做一些逻辑判断,看这个标签里的东西是不是自己需要的,然后进行操作
    }

    //解析出来的标签值
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
    // string 这个就是当前解析标签的值,
    }


    其实还有一种xml解析的方法,就是dom解析,它是把XML看成树型结构,先找到根节点,
    然后利用循环嵌套,遍历根节点的子节点,遍历子节点的子节点,一直遍历到叶子节点,当然叶子节点
    是最后一层了,里面就是我们要得数据。
    这种方法我感觉不好用,太麻烦,循环嵌套太多。所以不推荐使用
    而且需要导入libxml2.dylib这个类库,最后还得修改路径  /usr/include/libxml2 
    但是在这里我还是把这个第三方类给出来吧
    http://pan.baidu.com/s/1sjtXAUh


    好接下来就是我们的JSON解析了。
    我感觉JSON解析的解析过程不重要,重要的是JSON解析之后对结果的处理
    JSON解析后是个dictionary,但是字典中有可能包含字典和数组,数组中还可以包含字典。
    新浪微博的请求微博返回的数据经过JSON解析结果就是这样的。
    下面就简单介绍一下JSON解析过程
    其实就一句话

    data就是解析数据
    //IOS5自带解析类NSJSONSerialization从data中解析出数据放到字典中
        NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:Data options:NSJSONReadingMutableLeaves error:&error];
      
     //TouchJSON
    //将解析得到的内容存放字典中
     NSDictionary *pRootDic = [[CJSONDeserializer deserializer]deserialize:data error:&error];
    //这里的解析对象是NSData类型
      
    //SBJSON    
      // 获取一个解析器对象 
        SBJsonParser *parser = [[[SBJsonParser alloc] init]autorelease];
        //获取json串解析后返回的字典
        NSDictionary *rootDic = [parser objectWithString:String error:&error];
    //需要注意的是要先把解析的数据给解码为NSString类型然后才可以解析
        
     //JSONKit
     //获取解析后的字典(完成解析,返回值为字典类型)
      NSDictionary *pWeatherDic = [jsonStr objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];//统一编码标准
    //注意 jsonStr还是把数据先解码为NSString型,之后jsonStr直接用解析方法就行了


    //这里附带一个把data转化为NSString类型的方法
      NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
      
      下面附上TouchJSON,SBJSON 和 JSONKit的第三方类的链接
      http://pan.baidu.com/s/1bnpGwxD



    好了今天就到这里,把最近学的知识分享给大家,如有错误欢迎指正 —— LC




  • 相关阅读:
    $router和$route的区别
    提莫攻击
    paste命令
    数组中的第K个最大元素
    od命令
    被围绕的区域
    不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
    面试官:对象可能会迟到,但它永远不会缺席
    Kubernetes 的层级命名空间介绍
    每日一道 LeetCode (21):对称二叉树
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3509083.html
Copyright © 2020-2023  润新知