zoukankan      html  css  js  c++  java
  • JSON和XML

    n网络
    JSON和XML
    niOS学院
    n李明杰
    nJSON
    n什么是JSON
    pJSON是一种轻量级的数据格式,一般用于数据交互
    p服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
    p
    nJSON的格式很像OC中的字典和数组

    {"name" : "jack", "age" : 10}

    {"names" : ["jack", "rose", "jim"]}

    p标准JSON格式的注意点:key必须用双引号
    p
    n要想从JSON中挖掘出具体数据,得对JSON进行解析
    pJSON 转换为 OC数据类型
    nJSON – OC 转换对照表
    nJSON – OC 转换练习
    nJSON解析方案
    n在iOS中,JSON的常见解析方案有4种
    p第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
    p苹果原生(自带):NSJSONSerialization(性能最好)
    p
    nNSJSONSerialization的常见方法
    pJSON数据 à OC对象

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

    pOC对象 à JSON数据

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

    n解析来自服务器的JSON
    nXML
    n什么是XML
    p全称是Extensible Markup Language,译作“可扩展标记语言”
    p跟JSON一样,也是常用的一种用于交互的数据格式
    p一般也叫XML文档(XML Document)
    p
    nXML举例

    <videos>

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

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

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

    </videos>

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

    <?xml version="1.0" ?>

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

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

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

    <videos>

        <video>

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

               <length>30</length>

        </video>

    </videos>

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

    <video>小黄人</video>

    p第2个

    <video>

        小黄人

    </video>

    nXML语法 – 属性(Attribute)
    n一个元素可以拥有多个属性

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

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

    <video>

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

            <length>30</length>

    </video>

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

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

    p提取video元素中name和length属性的值

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

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

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

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

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

    parser.delegate = self;

    // 开始解析

    [parser parse];

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

    - (void)parserDidStartDocument:(NSXMLParser *)parser

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

    - (void)parserDidEndDocument:(NSXMLParser *)parser

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

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

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

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

    n
    nGDataXML配置
    nGDataXML基于libxml2库,得做以下配置
    p导入libxml2库
    p
    p
    p
    p
    p设置libxml2的头文件搜索路径(为了能找到libxml2库的所有头文件)
    ü在Head Search Path中加入/usr/include/libxml2
    p设置链接参数(自动链接libxml2库)
    ü在Other Linker Flags中加入-lxml2
    nGDataXML配置
    n由于GDataXML是非ARC的,因此得设置编译参数
    nGDataXML使用
    nGDataXML中常用的类
    pGDataXMLDocument:代表整个XML文档
    p
    pGDataXMLElement
    ü代表文档中的每个元素
    ü使用attributeForName:方法可以获得属性值
    p
    nJSON和XML比较
    n同一份数据,既可以用JSON来表示,也可以用XML来表示
    n
  • 相关阅读:
    MySQL忘记root密码的找回方法
    MySQL中的备份和恢复
    MySQL中的锁(表锁、行锁)
    设计模式之: 策略模式
    MySQL流程函数
    高效查看MySQL帮助文档的方法
    php动态获取函数参数
    设计模式之: 代理模式
    网站性能优化指标
    设计模式之: 状态模式
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4888695.html
Copyright © 2011-2022 走看看