還在比較 JSON 和 XML?Stop!

2015-11-29    分類:其他、程式設計開發、首頁精華8人評論發表於2015-11-29

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

JSON 還是 XML?哪一個更好?哪一個更快?接下來的專案我該用哪一個?STOP!它們之間沒有任何可比性。就像比較自行車和賓士S65 AMG,你說,哪一個更好?它們都是交通工具,都可以讓你從家裡移動到辦公室,對吧?在有些情況下,自行車或許還更快點。但這是否意味著它們就可以相互比較?明顯不行!這個道理同樣適用於JSON和XML。它們有著各自不同的適用範圍,它們是兩碼事。

JSON是很好的資料格式,不過它僅僅只是一種資料格式

The Men Who Stare at Goats (2009) by Grant Heslov

下面是一個簡單的JSON資料片段(140個字元):

{
  "id": 123,
  "title": "Object Thinking",
  "author": "David West",
  "published": {
    "by": "Microsoft Press",
    "year": 2004
  }
}

在XML中可能就是這樣的(167個字元):

<?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中完全解析。那麼,是不是JSON更好,XML正在逐漸走向滅亡呢?!還有誰需要這個重量級的已經歷經15載春秋的XML?

我,我需要它,我喜歡它。原因麼,且聽我慢慢道來。

首先不要誤會我的意思:我不反對JSON,一點也不。這是一個很好的資料格式。不過它只是一種資料格式。我們會臨時使用它從點A傳送一段資料到點B。的確,它比XML更短,更易讀短。但是僅此而已。

XML不是資料格式,它是一種語言。一種非常強大的語言。下面我要告訴你它的厲害之處,告訴你為什麼我如此深愛著它。同時,我強烈推薦你閱讀Elliotte Rusty Harold和W. Scott Means寫的《XML in a Nutshell第三版》。

我認為XML有4個功能讓它有別於JSON或其他簡單的資料格式,例如YAML。

  • XPath。為了從上面的文件中獲得類似出版年份的資料,我只要傳送XPath查詢即可:/book/published/year/text()。但是,必須得有一個能夠理解請求,並返回2004的XPath處理器。這樣做的好處是,XPath 2.0是一個非常強大的查詢引擎,有它自己的函式、謂詞和座標軸等,你可以照字面意思把任何邏輯放到XPath要求中,而無需使用,例如Java,編寫任何邏輯。你可以這麼問“How many books were published by David West in 2004?(David West 2004年出版了多少書)”,直接通過XPath就可以得到答案。而 JSON望塵莫及。
  • 屬性和名稱空間。你可以將後設資料加入到你的資料中,就像上面使用id屬性那樣。資料保持在元素,例如這本書的作者的內部,而後設資料(關於資料的資料),可以且應該置於屬性中。這大大有助於組織和結構化資訊。最重要的是,元素和屬性都可以被標記為屬於特定的名稱空間。這在若干個應用程式工作於同一個XML文件的時候非常有用。
  • XML Scheme。當你在這裡建立了一個XML檔案,又在其他地方修改了幾次,然後將其傳輸到另一個地方的時候,你要確保它的結構不受任何這些行動的破壞。其中一個檔案可能使用<year>儲存釋出日期,另一個則使用<date>符合ISO-8601。為了避免結構混亂,不妨建立一個補充檔案,這就是所謂的XML Scheme,並和主文件一起釋出。任何想要工作於主文件的人首先會使用提供的scheme來驗證其正確性。這是一種生產整合測試。 RelaxNG是另一種類似但更簡單的機制:如果你覺得XML Scheme太複雜的話,也可以試試這個。
  • XSL。無需任何Java /Ruby/等程式碼,你也可以修改XML文件。只要建立一個XSL 轉換文件並“應用”到你的原始XML即可。然後你就會得到一個新的XML文件。XSL語言(順便說一句,這是純函式式的)是專為分層資料操作而設計的。所以,它比Java或任何其他OOP /程式方法都要適合這項任務。你可以將XML文件轉換成包括純文字和HTML在內的任何東西。有些人抱怨說XSL過於複雜,但請先試一試。你不需要掌握所有內容,而且它的核心功能非常直截了當。

其他還有,此列表並不完整,但是這四個功能助我良多。它們使得我的文件能夠“自給自足”。它可以驗證自己(XML Scheme),它知道如何修改自己(XSL),它還允許我很方便地訪問裡面的任何東西(XPath)。

還有很多語言、標準和應用是圍繞XML開發的,包括XForms、SVG、MathML、RDF、OWL、WSDL等,不過在主流專案中你可能不大使用它們,因為它們比較“小眾化”。

JSON就沒有設計這些功能,即使其中有些正試圖在JSON世界中找到自己的定位,如用於查詢的JSONPath,用於轉換的“some tools”,還有用於驗證的JSON-Scheme。但相比XML提供的工具,它們只能算是無力又拙劣的模仿,我不認為它們能夠化腐朽為神奇。或者可以這麼說:它們滅亡是遲早的事。它們將一種既不錯又簡單的格式弄得亂七八糟面目全非。

因此,我們得出結論,JSON是一種沒有額外功能的簡單的資料格式。它的最佳使用案例是AJAX。在其他情況下,我強烈建議你使用XML。

譯文連結:http://www.codeceo.com/article/stop-compare-json-and-xml.html
英文原文:Stop Comparing JSON and XML
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章