連迎迎 廊坊師範學院資訊科技提高班 十三期
JSON和XML就像武林界的屠龍刀和倚天劍,那麼他們孰強孰弱?
XML長期執資料傳輸界之牛耳,而JSON作為後起之秀,已經盟主發起了挑戰。
那就讓他們來進行PK一下
<1>. JSON相比XML的不同之處
- 沒有結束標籤
- 更短
- 讀寫的速度更快
- 能夠使用內建的 JavaScript eval() 方法進行解析
- 使用陣列
- 不使用保留字
總之: JSON 比 XML 更小、更快,更易解析。
<2>. XML和JSON的區別:
XML的主要組成成分:
XML是element、attribute和element content。
JSON的主要組成成分:
JSON是object、array、string、number、boolean(true/false)和null。
XML要表示一個object(指name-value pair的集合),最初可能會使用element作為object,每個key-value pair 用 attribute 表示:
<student name="soゝso" age="27"/>
但如個某個 value 也是 object,那麼就不可以當作attribute:
<student name="soゝso" age="27"> <address> <country>中國</country> <province>北京市</province> <city>朝陽區</city> <district>北京市朝陽區東四環遠洋國際中心A座1906 </district> </address> </student>
那麼,什麼時候用element,什麼時候用attribute,就已經是一個問題了。
而JSON因為有object這種型別,可以自然地對映,不需考慮上述的問題,自然地得到以下的格式。
{
"name": "John",
"age" : 10,
"address" : {
"country" : "中國",
"province" : "北京市",
"city" : "朝陽區",
"district" : "北京市朝陽區東四環遠洋國際中心A座1906",
}
}
XML需要選擇怎麼處理element content的換行,而JSON string則不須作這個選擇。
XML只有文字,沒有預設的數字格式,而JSON則有明確的number格式,這樣在locale上也安全。
XML對映陣列沒大問題,就是陣列元素tag比較重複冗餘。JSON 比較易讀。
JSON的true/false/null也能容易統一至一般程式語言的對應語義。
————————————————————————————————————————————————————————
不過,XML不是一種資料格式,而是一種語言,非常強力的一種。下面我將從幾個方面來解釋我為何這麼說:
一,XPath。要想從上述檔案單獨獲取到發行年份,我只是查詢XPath:/book/published/year/text()。但是,必須有一個XPath處理器來理解我的請求並返回2004。XPath 2是一個非常強大的查詢引擎功能,等你可以把任何邏輯引入XPath請求而無需編寫任何遍歷邏輯在java中,例如。你可能會問:“大衛·韋斯特在2004出版了多少本書?”很容易通過XPath獲得答案。JSON卻不行
二,屬性和名稱空間。您可以將元資料附加到資料中,就像上面使用id屬性所做的那樣。例如,資料儲存在元素中,就像書作者的名字一樣,元資料(關於資料的資料)可以並且應該放在屬性中。這有助於組織和構造資訊。最重要的是,這兩個元素和屬性都可以標記為屬於某些確定的名稱空間。在一些應用程式使用同一個XML文件,這是一個非常有用的技術。
三,XML Schema。當你在一個地方建立一個XML文件時,在其他地方修改幾次,然後把它轉移到另一個地方,你要確保它的結構不會被任何一個動作破壞。其中一個可以使用<year>儲存出版日期而另一個使用<date>和ISO-8601。為了避免結構上的混亂,建立一個補充文件,稱為XML模式,並將其與主文件一起傳送。每個想使用主文件的人都將首先使用提供的模式來驗證其正確性。這是一種在生產中的整合測試。RelaxNG是類似的更簡單的機制,如果你試過以後,會發現XML架構太複雜。
四,XSL。你可以把你的XML文件的修改沒有任何類似java/ruby程式碼。只需建立一個XSL轉換文件並將其應用於您的原始XML。作為輸出,您將獲得一個新的XML。順便說一下,XSL語言(它完全是功能性的)是為分層資料操作而設計的。它是比java或OOP/程式更適合這項任務的方法。您可以將XML文件轉換為任何內容,包括純文字和HTML。有些人抱怨XSL的複雜性,但請試一下。你不需要所有的,它的核心功能是非常直接的。
以上這些並不是一個完整的列表,但這四個特性在我看來真的很重要。它們使我的文件具有“自給自足”的能力,它可以驗證自己(XML模式),它知道如何修改自身(XSL),它使我獲取內部的任何東西都非常方便(XPath)。還有更多的語言,標準,和開發應用程式,XML,包括XForms,SVG,MathML,RDF,OWL,WSDL等等。但你是不太可能在一個主流的專案使用他們。JSON沒有這樣的特點,JSON是一種簡單的資料格式,沒有額外的功能。它的最佳用例是ajax。
——————————————————————
XML文件可以附上DTD、Schema,還有一堆的諸如XPath之類規範,使用自定義XML元素或屬性,能很方便地給資料附加各種約束條件和關聯額外資訊,從資料表達能力上看,XML強於Json,但是很多場景並不需要這麼複雜的重量級的東西,輕便靈活的Json就顯得很受歡迎了。