數據解析(XML和JSON數據結構)


一   解析
二 XML數據結構
三 JSON 數據結構
 
 
一 解析
1  定義: 從事先規定好的格式中提取數據
    解析的前提:提前約定好格式,數據提供方按照格式提供數據、數據獲取方則按照格式獲取數據
 
2  主流的數據交換格式有兩種:XML 、JSON
3  iOS 開發常見的解析 :
3.1  XML 解析 :SAX 解析和DOM 解析
       XML 解析工具:NSXMLParser、GDataXMLNode、TouchXML 和 KissXML 等
3.2 JSON 解析
解析工具:JSONKit、NSJSONSerialization、TouchJSON和SBJSON等,其中NSJSONSerialization (系統提供的解析類,性能最好的,解析效率最高)
 
二 XML數據結構
----XML------
1 可擴展標記語言(eXtensible Markup Language):存儲數據和傳送數組
2 跟 JSON 解析一樣,常用於交互數據格式
3 一般 XML 文檔 (XML Document
4 舉例
    <student> 【標簽,表示開始】
        <name>你</name>
        <hobby>女</hobby>
    </student> 【標簽,表示結束】
5 XML 文檔的語法:
5.1 文檔聲明:在 XML 文檔最前面,必須寫一個文檔聲明
    a 最簡單的聲明 :<?xml version = "1.0"?>
    b 用encoding 屬性,來說明文檔字符編碼:<?xml version = "1.0" encoding = "UTF-8"?>
5.2 元素(Element):一個元素,會包含一個開始標簽和一個結束標簽
    a 有所有內容:<name>你</name>
    b 無元素內容:<name></name>
    而且一個元素可嵌套若干個子元素,但不能出現交叉嵌套
<students>
    <student> 【標簽,表示開始】
        <name>你</name>
        <hobby>女</hobby>
    </student> 【標簽,表示結束】
<stdudents>
    ** 注意 : 1 規范的 XML 文檔最多只有一個根元素,其他的都是根元素的子孫元素。
              2 在 XML 中,空格和換行,都會被當做具體內容去處理,例如: a和b 是不一樣的
                a <name>你</name>
                b <name>
                   
                  </name>
5.3 屬性(Atribute):一個元素可以擁有多個屬性,例如
        <video name="小黃人" hobby="apple"/>【video 元素擁有 name,hobby兩個屬性】
    *注意 屬性的值必須用 "" 或者 '' 括住
    *屬性表示的信息,也可用子元素來表示,例如:
    <video>
        <name>小黃人</name>
        <hobby>apple</hobby>
    </video>
6 對 XML 文檔的解析:
    提取 name 元素里面的內容:<name>小黃人</name>
    或者是提取 video 元素中 name 和 hobby 的值 :<video name="小黃人" hobby="apple"/>
7 ---  SAX 解析 ---- Simple API for XML
SAX: 基於事件驅動的解析方式,逐行解析數據(采用協議回調機制)
NSXMLParser 是 iOS 自帶的 XML 解析類,采用 SAX 方式解析數據
解析過程由 NSXMLParserDelegate 協議方法回調
<students>
    <student>
        <name> 你</name>
        <hobby>女</hobby>
    </student>
</students>
a 解析方式,逐行進行解析。
a.1 打開 XML 文檔
a.2 開始節點(開始標簽)
a.3 逐行進行解析
a.4 發現元素里面的內容
a.5 提取內容
a.6 結束節點(結束標簽)
a.7 循環開始,直到遇到 根元素的結束標簽,解析才徹底結束
 
b iOS 中 XML 解析方式有狠多
b.1 蘋果原生: NSXMLParser -- SAX 方式解析,使用簡單
b.2 第三方框架:
    1 libxm12 : 純 C 語言,默認被包含進了 iOS SDk
    2 GDataXML :DOM 的解析方式,是由谷歌開發的,底層基於 libxml2
 
 
8 ---DOM 解析----
 
a Document Object Model (文檔對象模型),將整個 XML 文檔讀入,將構建駐留內存的樹結果(節點數),通過遍歷樹結構的任意XML節點,讀取它的屬性和值,而且通常情況下,可以借助XPath,直接查詢 XML 節點
b 步驟:
b.1 獲取 GDataXMLNode.h/m 文件,將 GDataXMLNode.m 添加到所需工程
b.2 添加類庫 libxml2.tbd 到工程中    libxml2.dylib(iOS7 之前)
b.3 在工程中的“Build settings”頁面中找到“Header search path”項,添加 /usr/include/libxml2
b.4 導入 GDataXMLNode.h 文件到頭文件中,如編譯成功,則 GDataXMLNode 添加成功
 
c 屬性和方法
name 取標簽名
attributeForName 取屬性節點
stringValue 取標簽間的字符串
rootElement 子節點
 
三 JSON 數據結構
1 JSON (JavaScript Object Notation,輕量級的數據交換格式,是基於 JS 的一個子集,是完全采用獨立語言的文本格式,容易閱讀和編寫,易於機器解析和生成,非常適合於服務器和客戶端的交互
2 注意: 標准的JSON格式:Key 必須使用雙引號
3 JSON 數據結構的語法
3.1中的數據類型 : 字符串、數值、BOOL、對象、數組
3.2文件中有兩種結構:
對象 、數組
3.3 JSON - OC 兩者對應的數據類型
    a JSON 中的大括號 {},在OC 中 NSDictionary
    b JSON 中的方括號 [], 在OC 中表示 NSArray
    c JSON 中的雙引號 "", 在OC 中表示 NSString
4 JSON 數據結構的功能
數據交換、內容管理、配置文件
5 在 iOS 中常見的 JSON 解析方式:
 5.1 原聲(自帶):NSJSONSerialization(性能最好的)
          NSJSONSerialization 里面包含了兩個方法來通過不同數據形式解析JSON數據
5.1.1  +JSONObjectWithData: options: error: 使用緩沖區數據解析JSON
5.1.2  +writeJSONObject: toStream: options: error: 使用文件流的行式解析JSON
 5.2 第三方:JSONKit、SBJSON、TouchJSON(依次從左到右,越來越差)
objectFromJSONData
四 XML 與 JSON 兩種數據結構的優缺點
1.XML與JSON兩種數據結構的優缺點

 1> XML
 優點:\u2028

  • 格式統一, 符合標准\u2028

  • 容易與其他系統進行遠程交互, 數據共享比較方便

\u2028 缺點:

  • XML文件格式文件龐大, 格式復雜, 傳輸占用帶寬\u2028

  • 服務器端和客戶端都需要花費大量代碼來解析XML, 不論服務器端和客戶端代碼變的異常復雜和不容易維護

  • 客戶端不同,瀏覽器之間解析XML的方式不一致, 需要重復編寫很多代碼\u2028

  • 服務器端 和 客戶端 解析XML花費資源和時間

 2> JSON
 優點:\u2028

  • 數據格式比較簡單, 易於讀寫, 格式都是壓縮的, 占用帶寬小\u2028

  • 易於解析這種語言 

  • 支持多種語言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等語言服務器端語言, 便於服務器端的解析\u2028

  • 因為JSON格式能夠直接為服務器端代碼使用, 大大簡化了服務器端和客戶端的代碼開發量, 但是完成的任務不變, 且易於維護\u2028

 缺點:\u2028

  • 沒有XML格式這么推廣的深入人心和使用廣泛, 沒有XML那么通用性\u2028

  • JSON格式目前在Web Service中推廣還屬於初級階段

2.JSON、XML解析方式的底層實現

 1> XML

  Xml兩種解析方式,DOM 和 SAX。

  DOM 需要讀入整個XML文檔(文檔驅動),SAX 是事件驅動的,並不需要讀入整個文檔,文檔的讀入過程也就是SAX的解析過程。

  SAX 簡單地說就是對XML文檔進行順序掃描,當掃描到 文檔 的 開始 與 結束 ,元素(element)的 開始 與 結束 時,就會觸發相應的事件處理 函數,由事件處理函數做相應的動作,處理完后繼續掃描,直到文檔結束,則解析完畢

  DOM 解析XML文件時,會將XML文件的所有內容讀取到內存中,然后允許你使用 DOM API 操作 XML 樹。也就是說,DOM 會把XML以 樹 的形式讀取到內存中,然后在通過相應的 API 來操作這個 XML樹,從而達到解析XML文件的目的

 2> JSON

  json底層原理 遍歷字符串中的字符,最終根據特助字符,比如{},[],:號等進行區分,{}是字典,[]表示的是數組,:號是字典的鍵和值的分水嶺,最后是將json數據轉化為字典,然后使用 KVC 將字典轉為 model

3 選擇推薦

1)對於復雜的數據結構使用XML,簡單的數據結構可采用JSON。

2)在互聯網應用中數據傳輸中,提倡使用JSON。

 
3)針對前后端的差異,可以在服務端使用XML,在前端使用JSON,兩者之間的轉換在服務器端完成。這樣可以各取所長
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM