不少人都在內心糾結,若是 JSON 和 XML 相比,誰更好誰更快?在接下來的新項目中到底選擇哪個?別傻了!徹底沒有可比性。就像自行車和 AMG S65 ,你能說哪一個更好嗎?雖然二者都是交通工具,但有些狀況下,自行車反而更便捷。因此 JSON 和 XML 也同樣,它們都各有所長,徹底沒有必要進行比較。html
下面舉一個簡單的 JSON 數據(140個字符):java
{ "id": 123, "title": "Object Thinking", "author": "David West", "published": { "by": "Microsoft Press", "year": 2004 } }
一樣的數據在 XML 中會表示以下(167個字符):json
<?xml version="1.0"?> <book id="123"> <title>Object Thinking</title> <author>David West</author> <published> <by>Microsoft Press</by> <year>2004</year> </published> </book>
很容易看出其中的區別,前者更簡潔更容易理解,並且能在JavaScript 中能完美解析。因此,咱們即可以簡單粗暴地放棄 XML 選擇 JSON 了嗎?誰還會須要已歷時15年的重量級語言呢?服務器
但偏偏相反,本人就很是喜好 XML ,且聽下文分解。框架
但千萬別誤會,本文並非在反對 JSON 。 JSON 的確是很好的數據格式,但它僅僅只是一種數據格式,常常被臨時用於將數據從 A 點傳到 B 點。它比 XML 更簡短易讀,但僅此而已。工具
XML 是一種很是強大的語言,而非只是單純的數據格式。相對於 JSON 和其餘簡單的數據格式來講,如 YAML ,XML 至少有如下四個重要特性。性能
爲了從文檔中獲得上文相似的出版年份,只須要發送一個簡單的 XPath 請求:/book/published/year/text() 。可是,必須得有一個 XPath 處理器來解析請求並返回2004。好就好在 XPath2.0是集 functions、predicates、axes 等爲一體的強大檢索引擎,在不用 Java 代碼編寫任何遍歷的邏輯的狀況下,就能夠在 XPath 請求中以天然語言形式加入任何邏輯,例如,你能夠直接發出請求 「How many books were published by David West in 2004?」 ,便能經過 XPath 獲得答案。而這是 JSON 所不能作到的。測試
能夠將 metadata 加到 XML 數據中,正如上面的 id 屬性同樣。數據保存在元素中,例如圖書做者的姓名,而 metadata(數據的數據)應該保存爲屬性,這會大大有利於組織和結構化信息。最重要的是,元素和屬性均可以標記爲屬於某個 namespaces ,當多個應用使用同一 XML 文檔時,這種技術的優點會很是明顯。spa
試想這樣的狀況,當你在一臺機器上建立了 XML 文檔,在其餘電腦上作了數次修改,而後又傳到別的電腦上使用,因此必須確保文檔結構沒有被中間操做所破壞。好比可能有人用 <year> 保存出版日期,但別人又可能使用 ISO-8601 格式的 <date> 。爲了不這樣的結構混亂,咱們能夠建立一個說明文檔 XML Schema ,和主文檔一塊兒進行保存。在每次操做主文檔以前,都須要經過 schema 文件檢查其正確性,這是生產過程當中的一種集成測試。 RelaxNG 也是相似的機制,但會簡單不少,若是以爲 XML Schema 太過複雜不妨嘗試用 RelaxNG。設計
事實上,能夠不用任何 Java/Ruby 等代碼就能完成 XML 文檔的修改。簡單的說,你只須要建立一個 XSL transformation 文檔並將其應用於原始 XML ,而後獲得一個新的 XML 。 XSL 語言(純功能性語言)是專爲分層數據操做設計的,它比 Java 或任何其餘面向對象/過程的語言都更適合這一任務。藉助 XSL 能夠將 XML 轉換爲任何形式,包括純文本和 HTML 。不少人抱怨 XSL 太複雜,但其實沒那麼難, XSL 的核心功能其實很簡單,你們不妨一試。
以上所述並非 XML 的所有特徵,但這四大特性的確用途非凡。它們不只可讓文檔的「自給自足」,還能進行自我驗證(XML Schema),進而知道如何修改(XSL),最後還能方便地得到其中的文檔內容(Xpath)。
同時,市面上還有不少以 XML 爲基礎發展的語言、標準和應用,包括 Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但通常的主流項目中都不會用到,由於它們的針對性都太強。
設計 JSON 的用途並不是是知足以上特性,儘管 JSON 領域如今努力嘗試,包括用於查詢的 JSONPath 、一些轉換工具和用於驗證的 json-schema ,但和強大的 XML 相比這只是微不足道的模仿,筆者並不認爲會有長遠發展,並且早晚會消失殆盡。
綜上所述, JSON 是一種沒有過多附加功能的簡單數據格式,其最佳的使用狀況是在 AJAX 下,除此以外,本人都強烈推薦你們使用 XML。
(編譯自:https://dzone.com/articles/stop-comparing-json-and-xml)
OneAPM 爲您提供端到端的 Java 應用性能解決方案,咱們支持全部常見的 Java 框架及應用服務器,助您快速發現系統瓶頸,定位異常根本緣由。分鐘級部署,即刻體驗,Java 監控歷來沒有如此簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客。