zoukankan      html  css  js  c++  java
  • 网络-JSON和XML

    JSON
    什么是JSON
    JSON是一种轻量级的数据格式,一般用于数据交互
    服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)

    JSON的格式很像OC中的字典和数组
    {"name" : "jack", "age" : 10}
    {"names" : ["jack", "rose", "jim"]}
    标准JSON格式的注意点:key必须用双引号

    要想从JSON中挖掘出具体数据,得对JSON进行解析
    JSON 转换为 OC数据类型

    JSON – OC 转换对照表

    JSON – OC 转换练习

    JSON解析方案
    在iOS中,JSON的常见解析方案有4种
    第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
    苹果原生(自带):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;

    解析来自服务器的JSON

    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元素拥有name和length两个属性
    属性值必须用 双引号"" 或者 单引号'' 括住

    实际上,属性表示的信息也可以用子元素来表示,比如
    <video>
        <name>小黄人 第01部</name>
            <length>30</length>
    </video>

    XML解析
    要想从XML中提取有用的信息,必须得学会解析XML
    提取name元素里面的内容
    <name>小黄人 第01部</name>

    提取video元素中name和length属性的值
    <video name="小黄人 第01部" length="30" />

    XML的解析方式2种
    DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
    SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件

    iOS中的XML解析
    在iOS中,解析XML手段有很多
    苹果原生
    NSXMLParser:SAX方式解析,使用简单

    第三方框架
    libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX方式解析
    GDataXML:DOM方式解析,由Google开发,基于libxml2

    XML解析方式的选择建议
    大文件:NSXMLParser、libxml2
    小文件:GDataXML、NSXMLParser、libxml2

    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基于libxml2库,得做以下配置
    导入libxml2库


    设置libxml2的头文件搜索路径(为了能找到libxml2库的所有头文件)
    Head Search Path中加入/usr/include/libxml2

    设置链接参数(自动链接libxml2库)
    Other Linker Flags中加入-lxml2

    由于GDataXML是非ARC的,因此得设置编译参数

    GDataXML使用
    GDataXML中常用的类
    GDataXMLDocument:代表整个XML文档

    GDataXMLElement
    代表文档中的每个元素
    使用attributeForName:方法可以获得属性值

    JSON和XML比较
    同一份数据,既可以用JSON来表示,也可以用XML来表示

    相比之下,JSON的体积小于XML,所以服务器返回给移动端的数据格式以JSON居多

    本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji
  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/laugh/p/6548369.html
Copyright © 2011-2022 走看看