iOS進階編程之XML,JSON資料解析,iosjson
解析的基本概念
所謂“解析”:從事先規定好的格式串中提取資料
解析的前提:提前約定好格式、資料提供方按照格式提供資料、資料擷取方按照格式擷取資料
iOS開發常見的解析:XML解析、JSON解析
一、XML資料結構
XML資料結構基本概念
XML:Extensible Markup language (可延伸標記語言 (XML)),主流格式之一,可以用來儲存和傳輸資料格式之一,可以用來儲存和傳輸資料
XML資料格式的功能
1、資料交換
2、內容管理
3、用作設定檔
XML資料結構的文法
1、聲明
2、節點使用一對標籤表示
3、根節點是起始節點,只有一個。節點可以嵌套
4、節點可以有值,儲存在一對標籤中
如何進行XML解析
有以下兩種方法:
1、SAX解析
SAX:Simple API for XML .基於事件驅動的解析方式,逐行解析資料。(採用協議回調機制)
SAX解析XML,是基於事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔載入完之後才採取操作,SAX解析器會檢測整個XML樹形結構,你的代碼會控制它在哪裡停止,使用哪些資料之類的事情。就是說,SAX可控制性強,佔用記憶體小,適用於提取部分資料。當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理,如果XML格式在某一處出現錯誤,前面的資料會被提取出來,錯誤後面資料的就顯示不出來。
NSXMLParse類是iOS內建的XML解析類。採用SAX方式解析資料
解析過程由NSXMLParserDelegate協議方法回調
解析過程:開始標籤->取值->結束標籤->取值
代碼的實現過程是,首先我們建立一個XML文檔,並引入檔案,如下:
其次我們建立一個表格試圖控制器(TableViewController)
定義一個私人屬性數組datasource用來儲存模型資料和startTag屬性用來暫存起始標籤
同時在方法ViewDidLoad裡面擷取檔案資料並指定代理<NSXMLParserDelegate>//解析器協議,同時為對應的重用標識符註冊儲存格的類型
NSXMLParserDelegate 解析器協議裡面有如下方法:
當XML在逐個解析檔案資料時,由於起始標籤和結束標籤名字一樣,當解析到結束標籤時,為了避免解析到的結束標籤後面的內容將模型對象中的相應的屬性覆蓋,在解析結束標籤的方法內部將起始標籤置為nil
在每個方法內部我們同時列印了一下方法名,這樣我們就可以在輸出端清晰的看到方法的執行順序,
同時在表格的設定方法內部建立重建機制
在設定相應的行數和分區,我們就可以在模擬器上顯示出如下結果:
2、DOM工具解析
DOM:Document Object Model (文件物件模型)。解析時需要將XML檔案整體讀入,並且將XML結構化成樹狀,使用時再通過樹狀結構讀取相關資料,尋找特定節點,然後對節點進行讀或寫。他的主要優勢是實現簡單,讀寫平衡;缺點是比較占記憶體,因為他要把整個xml文檔都讀入記憶體,檔案越大,這種缺點就越明顯。當檔案內容出現錯誤時,在輸入框內會標記出錯誤的位置
GDataXMLNode是Google提供的開元XML解析類,對libxml2.dylib進行了Objective-C的封裝,因此在使用GDataXML之前,你需要先匯入libxml2。
iOS中包含一個C語言的動態連結程式庫libxml2.dylib,解析速度比NSXMLParser快
二、JSON資料結構
JSON資料結構基本概念
Javascript Object Notation ,輕量級的資料交換格式,採用完全獨立於語言的文字格式設定,被稱為理想的資料交換語言,易於人閱讀和便攜,同時也易於及其解析何程,由於JSON解析便捷、快速,並且相同資料用JSON編輯所佔的記憶體更小,所以在iOS中我們我們使用JSON解析更加普遍。
JSON文檔有兩種結構:對象 、資料
對象:以“{“開始,以”}”結束,是“名稱/值”對兒的集合。名稱和值中間用“:”隔開。多個“名稱/值”對之間用“,”隔開。類似OC中的字典。
數組:以“["開始,以“]”結束,中間是資料。資料以“,”分割。
JSON中的資料類型:字串、數值、BOOL、對象、數組。
例如:
JSON – OC 轉換對照表
JSON資料結構的功能
1、資料交換
2、內容管理
3、設定檔
JSON解析方案
在iOS中,JSON的常見解析方案有4種
第三方架構:JSONKit、SBJson、TouchJSON(效能從左至右,越差)
蘋果原生(內建):NSJSONSerialization(效能最好)
下面是NSJSONSerialization解析過程: