在iOS上JSON 與 XML 的比較,iosjson
在與 web 服務進行資料交換的時候,通常支援兩種主要的資料格式(即:JavaScript 物件標記法 JSON 與可延伸標記語言 (XML) XML),兩者在可讀性上都不分高下,接下來對此進行簡單的總結和分析,有什麼不妥的地方也請大家多多指點.
一.簡介
XML
XML (即:可延伸標記語言 (XML))作為一種用於標記電子檔案夾使其具有結構性的標記語言,其設計宗旨就是為了傳輸資料;
在電腦中,標記指電腦所能理解的資訊符號,通過此種標記電腦之間可以處理包含各種資訊資料;
它是 Internet 環境中跨平台較依賴於內容的技術,適用於全球資訊網傳輸可提供統一的方法進行描述和交換獨立於應用程式或供應商的結構化資料中,可以用來標記資料、定義資料類型,是一種允許使用者對自己的標記語言進行定義的源語言,非常適合於 web 傳輸操作;
XML 在 iOS 中,DOM 解析器和 SAX 解析器可以用來解析它.SAX 是一中串流解析器,它逐句遍曆整個 XML 文檔,通過回呼函數返回解析後的資料.大部分 SAX 解析器接受一個 URL 作為參數,解析完目標資料就將資料返回.
例如:
NSXMLParser 類中有一個方法(initWithContentsOfURL:)只需使用 URL 來初始化一個解析器, NSXMLParser 會處理餘下操作;
通過回調 NSXMLParserDelegate 中定義的委託方法返回解析過的資料,但是由於解析器使用委託返回資料,每個需要處理的對象都需要有一個實現 NSXMLParserDelegate 的 NSObject 子類.與 DOM 解析器相比會使代碼不夠簡潔.而且 DOM 解析器首先需要將整個 XML 文檔載入到記憶體中才能開始解析, DOM 解析器的優勢是可以使用 XPath 查詢訪問隨機資料,也不需要像 SAX 模型一樣使用委託.
注:若使用一個類實現NSXMLParserDelegate,如果 XML 格式發生變更,代碼將會變得不可控.
JSON
JSON (即:JavaScript 物件標記法)作為一種輕量級的資料交換格式,比 XML 更加常用,採用完全獨立於語言的文字格式設定,具有良好的可讀性和快速編寫的特性,可在不同平台之間進行資料交換,而且 JSON 可以表示比"成對的名稱和數值"更加複雜的結構,例如數組和複雜的對象結構,雖然蘋果官方提供了 JSON 處理架構,但是在 iOS 4 中屬於私人 API, 並不能為廣大開發人員使用,而在 iOS 5 中則引入了 NSJSONSerialization 用於解析 JSON.
基本結構
1."成對的名稱和數值"的集合,在不同的語言中,它被理解為對象、記錄、結構、字典、雜湊表、有鍵列表或關聯陣列;
2.值的有序列表,在大部分語言中,它被理解為數組.
二.比較
XML優點:
格式統一,符合標準;
容易與其它系統進行遠程互動,資料轉送共用較為方便.
缺點:
檔案龐大, 檔案格式複雜,傳輸占頻寬;
伺服器端和用戶端都需要花費大量代碼來解析 XML, 導致伺服器端和用戶端代碼變得異常複雜臃腫且不易維護;
用戶端不同瀏覽器間解析 XML 的方式各不一致,需要為此重複編寫很多代碼;
伺服器端和用戶端解析 XML 消耗的資源和時間較高.
JSON優點:
資料格式較為簡單,易於讀寫操作,格式都是經過壓縮處理的所佔用頻寬小;
易於解析,用戶端 JavaScript 可簡單的通過 eval() 進行 JSON 資料讀取;
支援多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等伺服器端語言,更加便於伺服器端的解析;
在PHP 中已經有 PHP-JSON 和 JSON-PHP 的轉換方法,便於 PHP 序列化後的程式直接調用, PHP 伺服器端的對象數、組等能直接產生 JSON 格式,便於用戶端訪問提取;
因為 JSON 格式能直接為伺服器代碼使用,在確保完成任務的同時簡化了伺服器端和用戶端中代碼量級,且更加易於維護.
缺點:
沒有 XML 通用性那麼高,若要使伺服器端產生文法合格的 JavaScript 代碼並不是很容易做的,這種情況主要出現在較龐大的系統中,服務端和用戶端有不同的開發人員,因此他們之間必須協商對象的資料格式,從而很容易造成錯誤;
JSON 對資料描述性略遜於 XML.
三.小結
可讀性:兩者基本相同,建議文法與規範的標籤形式,XML 相對略占上峰;
擴充性:兩者都具有很好的擴充性, XML 具有先天擴充性優勢,但 JSON 也有;
編碼難度:兩者都擁有工具,但 JSON 的編碼明顯要比 XML 容易,即使不藉助工具也能寫出 JSON 代碼,相對更佔優;
解碼難度:該項 JSON 解碼基本毫無壓力,而 XML 則需要考慮節點和父節點;
資料體積: JSON 相對於 XML 要更佔優勢,且傳遞速率較快;
互動方面: JSON 與 JavaScript 之間互動更加方便便捷易於解析處理,具有更好的資料互動優勢;
資料描述: XML 對資料的描述要優於 JSON;
資料轉送: JSON 毫無疑慮遠超於 XML.
在 iOS 平台上處理 JSON 要比處理 XML 簡單一個數量級,如果伺服器同時支援 XML 和 JSON 格式,建議選擇 JSON 更加明智;
如果伺服器還未進行開發,更加推薦從支援 JSON 開始.