• 数据解析--JSON & XML


    >JSON

    是一种轻量级的 数据格式 (就像文档有txt格式  ,doc格式,JSON是数据的一种表现格式),一般用于数据交互,

    服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外,是文件)

    JSON的格式很像OC中的数组,字典.标准的JSON格式:key必须用双引号,不推荐单引号

    想要从JSON中拿到具体的数据,需要对JSON进行解析.JSON--->OC

    >JSON解析方案

        • iOS中,JSON的常见解析方案有4
        • 第三方框架:JSONKitSBJsonTouchJSON(性能从左到右,越差)
        • 苹果原生(自带):NSJSONSerialization性能最好
        • NSJSONSerialization的常见方法
        • JSON数据 à OC对象

    + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

        • OC对象 à JSON数据

    + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

    XML

        • 什么是XML
        • 全称是Extensible Markup Language,译作“可扩展标记语言”
        • JSON一样,也是常用的一种用于交互的数据格式
        • 一般也叫XML文档(XML Document
        • XML举例

    <videos>

        <video name="小黄人 01" length="30" />

        <video name="小黄人 02" length="19" />

        <video name="小黄人 03" length="33" />

    </videos>

    XML语法

        • 一个常见的XML文档一般由以下部分组成
        • 文档声明
        • 元素(Element
        • 属性(Attribute
        • XML语法文档声明
        • XML文档的最前面,必须编写一个文档声明,用来声明XML文档的类型
        • 最简单的声明

    <?xml version="1.0" ?>

        • encoding属性说明文档的字符编码

    <?xml version="1.0" encoding="UTF-8" ?>

    XML语法元素(Element

        • 一个元素包括了开始标签和结束标签
        • 拥有元素内容:<video>小黄人</video>
        • 没有元素内容:<video></video>
        • 没有元素内容的简写:<video/>
        • 一个元素可以嵌套若干个子元素(不能出现交叉嵌套)

    <videos>

        <video>

            <name>小黄人 第01</name>

                 <length>30</length>

        </video>

    </videos>

        • 规范的XML文档最多只有1个根元素,其他元素都是根元素的子孙元素
        • XML语法元素的注意
        • XML中的所有空格和换行,都会当做具体内容处理
        • 下面两个元素的内容是不一样的
        • 1

    <video>小黄人</video>

        • 2

    <video>

        小黄人

    </video>

    XML语法属性(Attribute

        • 一个元素可以拥有多个属性

    <video name="小黄人 01" length="30" />

        • video元素拥有namelength两个属性
        • 属性值必须用 双引号"" 或者 单引号'' 括住
        • 实际上,属性表示的信息也可以用子元素来表示,比如

    <video>

        <name>小黄人 第01</name>

            <length>30</length>

    </video>

    XML解析

        • 要想从XML中提取有用的信息,必须得学会解析XML
        • 提取name元素里面的内容

    <name>小黄人 第01</name>

        • 提取video元素中namelength属性的值

    <video name="小黄人 01" length="30" />

        • XML的解析方式有2
        • DOM:一次性将整个XML文档加载进内存,比较适合解析文件
        • SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析文件
        • iOS中的XML解析
        • iOS中,解析XML的手段有很多
        • 苹果原生
        • NSXMLParserSAX方式解析,使用简单
        • 第三方框架
        • libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOMSAX方式解析
        • GDataXMLDOM方式解析,由Google开发,基于libxml2
        • XML解析方式的选择建议
        • 大文件:NSXMLParserlibxml2
        • 小文件:GDataXML
        • NSXMLParser
        • 使用步骤

    // 传入XML数据,创建解析器

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

    // 设置代理,监听解析过程

    parser.delegate = self;

    // 开始解析

    [parser parse];

        • NSXMLParser采取的是SAX方式解析,特点是事件驱动,下面情况都会通知代理
        • 当扫描到文档(Document)的开始与结束
        • 当扫描到元素(Element)的开始与结束
        • NSXMLParserDelegate
        • 当扫描到文档的开始时调用(开始解析)

    - (void)parserDidStartDocument:(NSXMLParser *)parser

        • 当扫描到文档的结束时调用(解析完毕)

    - (void)parserDidEndDocument:(NSXMLParser *)parser

        • 当扫描到元素的开始时调用(attributeDict存放着元素的属性)

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

        • 当扫描到元素的结束时调用

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

    GDataXML使用

      • GDataXML中常用的类
      • GDataXMLDocument:代表整个XML文档
      • GDataXMLElement
      • 代表文档中的每个元素
      • 使用attributeForName:方法可以获得属性值

  • 相关阅读:
    Unity实现Bezier曲线的移动(三点之间的Bezier曲线的移动)
    error CS2001: Source file `Assets/Pro Standard Assets/Image Based/SaveGameData.cs' could not be found 错误
    Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?) 错误
    Unity拖拽旋转2D物体
    Unity预编译
    Activity的四种launchMode
    接入华为海外SDK支付,按下home键,之后支付页面被销毁
    Android动态权限申请
    armeabi与armeabi-v7a的区别
    win7上帝模式
  • 原文地址:https://www.cnblogs.com/LDSmallCat/p/4942233.html
Copyright © 2020-2023  润新知