溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JSON和XML的對比分析

發(fā)布時間:2020-10-15 14:55:36 來源:億速云 閱讀:176 作者:小新 欄目:編程語言

JSON和XML的對比分析?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

下面舉一個簡單的 JSON 數(shù)據(jù)(140個字符):

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

同樣的數(shù)據(jù)在 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>

很容易看出其中的區(qū)別,前者更簡潔更容易理解,而且能在JavaScript 中能完美解析。所以,我們便可以簡單粗暴地放棄 XML 選擇 JSON 了嗎?誰還會需要已歷時15年的重量級語言呢?

但恰恰相反,本人就非常喜愛 XML ,且聽下文分解。

但千萬別誤會,本文并不是在反對 JSON 。 JSON 的確是很好的數(shù)據(jù)格式,但它僅僅只是一種數(shù)據(jù)格式,經(jīng)常被臨時用于將數(shù)據(jù)從 A 點傳到 B 點。它比 XML 更簡短易讀,但僅此而已。

XML 是一種非常強(qiáng)大的語言,而非只是單純的數(shù)據(jù)格式。相對于 JSON 和其他簡單的數(shù)據(jù)格式來說,如 YAML ,XML 至少有以下四個重要特性。

  • XPath

為了從文檔中得到上文類似的出版年份,只需要發(fā)送一個簡單的 XPath 請求:/book/published/year/text() 。但是,必須得有一個 XPath 處理器來解析請求并返回2004。好就好在 XPath3.0是集 functions、predicates、axes 等為一體的強(qiáng)大檢索引擎,在不用 Java 代碼編寫任何遍歷的邏輯的情況下,就可以在 XPath 請求中以自然語言形式加入任何邏輯,例如,你可以直接發(fā)出請求 “How many books were published by David West in 2004?” ,便能通過 XPath 得到答案。而這是 JSON 所不能做到的。

  • Attributes and Namespaces

可以將 metadata 加到 XML 數(shù)據(jù)中,正如上面的 id 屬性一樣。數(shù)據(jù)保存在元素中,例如圖書作者的姓名,而 metadata(數(shù)據(jù)的數(shù)據(jù))應(yīng)該保存為屬性,這會大大有利于組織和結(jié)構(gòu)化信息。最重要的是,元素和屬性都可以標(biāo)記為屬于某個 namespaces ,當(dāng)多個應(yīng)用使用同一 XML 文檔時,這種技術(shù)的優(yōu)勢會非常明顯。

  • XML Schema

試想這樣的情況,當(dāng)你在一臺機(jī)器上創(chuàng)建了 XML 文檔,在其他電腦上做了數(shù)次修改,然后又傳到別的電腦上使用,所以必須確保文檔結(jié)構(gòu)沒有被中間操作所破壞。比如可能有人用 <year> 保存出版日期,但別人又可能使用 ISO-8601 格式的 <date> 。為了避免這樣的結(jié)構(gòu)混亂,我們可以創(chuàng)建一個說明文檔 XML Schema ,和主文檔一起進(jìn)行保存。在每次操作主文檔之前,都需要通過 schema 文件檢查其正確性,這是生產(chǎn)過程中的一種集成測試。 RelaxNG 也是類似的機(jī)制,但會簡單很多,如果覺得 XML Schema 太過復(fù)雜不妨嘗試用 RelaxNG。

  • XSL

事實上,可以不用任何 Java/Ruby 等代碼就能完成 XML 文檔的修改。簡單的說,你只需要創(chuàng)建一個 XSL transformation 文檔并將其應(yīng)用于原始 XML ,然后得到一個新的 XML 。 XSL 語言(純功能性語言)是專為分層數(shù)據(jù)操作設(shè)計的,它比 Java 或任何其他面向?qū)ο?過程的語言都更適合這一任務(wù)。借助 XSL 可以將 XML 轉(zhuǎn)換為任何形式,包括純文本和 HTML 。很多人抱怨 XSL 太復(fù)雜,但其實沒那么難, XSL 的核心功能其實很簡單,大家不妨一試。

以上所述并不是 XML 的全部特征,但這四大特性的確用途非凡。它們不僅可以讓文檔的“自給自足”,還能進(jìn)行自我驗證(XML Schema),進(jìn)而知道如何修改(XSL),最后還能方便地獲得其中的文檔內(nèi)容(Xpath)。

同時,市面上還有很多以 XML 為基礎(chǔ)發(fā)展的語言、標(biāo)準(zhǔn)和應(yīng)用,包括  Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但一般的主流項目中都不會用到,因為它們的針對性都太強(qiáng)。

設(shè)計 JSON 的用途并非是滿足以上特性,盡管 JSON 領(lǐng)域現(xiàn)在努力嘗試,包括用于查詢的 JSONPath 、一些轉(zhuǎn)換工具和用于驗證的 json-schema ,但和強(qiáng)大的 XML 相比這只是微不足道的模仿,筆者并不認(rèn)為會有長遠(yuǎn)發(fā)展,而且遲早會消失殆盡。

綜上所述, JSON 是一種沒有過多附加功能的簡單數(shù)據(jù)格式,其最佳的使用情況是在 AJAX 下,除此之外,本人都強(qiáng)烈推薦大家使用 XML。

OneAPM 為您提供端到端的 Java 應(yīng)用性能解決方案,我們支持所有常見的 Java 框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸,定位異常根本原因。分鐘級部署,即刻體驗,Java 監(jiān)控從來沒有如此簡單。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方技術(shù)博客。

感謝各位的閱讀!看完上述內(nèi)容,你們對JSON和XML的對比分析大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI