最近公司突發奇想趕緊XML作為數據交換過於臃腫,讓我這個實習生調研其他的數據交換格式是否可以在勝任XML的功能的前提下帶來更多的編程及性能效益。但對於沒有項目經驗的我始終無法去拿捏這些技術的真谛以及適用環境。請各路高手看完小弟的調研後給我個回復,出出主意!~~小弟不勝感激。
下面介紹下我們項目的情況,底層用C/C++在UINX上,數據庫是Oricle,Webservice是用JAVA開發,前台多用 WINFORM(界面很絢麗,並且業務比較復雜)和少量Web(准備用Silverlight),這樣一個跨語言跨平台的項目數據交換成了一個命脈的東西如何選擇確實事關重大。
序列化格式:XML、JSON、YAML對比
1直觀認識XML
<?XML version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book catalog="Programming">
<title lang="en">C++ Programming Language</title>
<author>Bjarne Stroustrup</author>
<year>1998</year>
<price>98.0</price>
</book>
<book catalog="Networking">
<title lang="en">TCP/IP Illustrated</title>
<author>Richard Stevens</author>
<year>1996</year>
<price>56.0</price>
</book>
</bookstore>
JSON
[
{\"ID\":\"3\",\"Order\":\"9\"},
{\"ID\":\"1\",\"Order\":\"6\"},
{\"ID\":\"2\",\"Order\":\"8\"}
]
YAML
name: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age 12
2格式簡介
XML (Extensible Markup Language)即可擴展標記語言
·文本協議,可以閱讀;
·嚴格的格式要求;
·運用廣泛,相關技術比較豐富,例如DTD、 XPath、XLink、XPoint、XSLT等;
JSON (JavaScript Object Notation)
·文本協議,比較易於閱讀;
·相比於XML,語法更簡單,體積更小,有Javascript語言的標准支持。缺少引用概念(XLink、XPoint),缺少路徑概念(XPath);
·XML用於更通用的目的,JSON更適合於數據交互的環境(尤其是web環境);
·最近JSON的興起也出現了很多JSON的開發工具支持,開發起來非常方便。
·JSON基於 Javascript語言(版本:ECMA 262 3rd Edition),現在趨向於成為一種跨語言的數據交互格式
YAML (YAML Ain't Markup Language)
·文本協議,易於閱讀;
·YAML的語法比JSON復雜,JSON可以看作YAML的一個子集(在YAML文檔中支持JSON格式的內容);
·適合表示程序語言的數據結構,支持串行處理和豐富的表達能力和可擴展性。
3編碼、解碼比較XML
·編碼難度:比較容易編碼,有豐富的編碼工具。
·解碼難度:XML的解析方式有兩種:
1.通過文檔模型解析,也就是通過父標簽索引出一組標記。例如:XMLData.getElementsByTagName("tagName"),但是這樣是要在預先知道文檔結構的情況下使用,無法進行通用的封裝。
2.遍歷節點(document 以及 childNodes)。這個可以通過遞歸來實現,不過解析出來的數據仍舊是形式各異,往往也不能滿足預先的要求。
凡是這樣可擴展的結構數據解析起來一定都很困難。
JSON (可理解為對JSON的序列化和反序列化)
·編碼難度:有豐富的工具將對象序列化為JSON文本;
·解碼難度:在知道JSON結構的情況下非常容易解析(反序列化就能得到想要的對象),在不知道JSON結構的情況下解碼非常困難。
YAML
和JSON相似,擁有比較強大的編碼和解碼工具(序列化工具但只限於幾種特定語言)。
Ruby、Python等動態編程語言比較早的加入到YAML陣營,現在Java等靜態語言也支持YAML格式的解析。YAML應用開始越來越廣泛。但從目前來看它並不是一個非常成熟的跨語言數據交換格式。
綜上所述,作為數據傳輸的載體,在知道數據結構的情況下,JSON和YAML處理更加方便和高效,同時也擁有良好的可讀性。其中JSON相關技術支持是最為豐富,也是操作最為方便的,雖然沒有YAML功能強大,但是前後台都可以方便對其進行操作以及減輕網絡負載的特點也是它的一大優勢。如果在數據嵌套不是非常復雜的情況下使用JSON將減小開發難度和性能提升。
C#操作示例1 XML
操做XML的程序就不列舉了,相信大家都很熟悉;
2 JSON
參見項目:基於.Net自帶類庫:JSonExpo
基於JSON.NET:Demo.JSon.Net、JsonByC# (類庫在JSon35r6.zip中)
注:JSON.Net
JSON.NET是一個開源項目,提供.Net環境下JSON的各種操作,其中包括JSON序列化和反序列化的方法。同時它還增加了很多對JSON數據的操作,包括對LINQ的支持,能大大加快我們對JSON開發的速度。具體的開發文檔在目錄下的:Documentation.chm
3 YAML
參考項目:YamlUtility
注:YAML對C#的支持現在還很少,只有簡單的類庫可以使用,暫不能滿足復雜的項目應用,同時關於YAML的資料很少,YAML的具體項目也很稀少。
Java操作示例1 XML
序列化格式對比.zip:http://files.cnblogs.com/lining/%E5%BA%8F%E5%88%97%E5%8C%96%E6%A0%BC%E5%BC%8F%E5%AF%B9%E6%AF%94.zip