JSON和XML:不可同日而語

【編者按】本文作者 Yegor Bugayenko 是 Teamed.io 公司的聯(lián)合創(chuàng)始人氨淌,在軟件質(zhì)量和工程管理方法領域有深入的研究。本文中伊磺,作者通過對比 JSON 盛正,向大家更詳細地闡述了 XML 的四大特性,幫助大家在搭建項目時選擇適合的數(shù)據(jù)格式類型屑埋。

很多人都在心里糾結豪筝,如果 JSON 和 XML 相比,誰更好誰更快?在接下來的新項目中到底選擇哪一個壤蚜?別傻了即寡!完全沒有可比性。就像自行車和 AMG S65 袜刷,你能說哪個更好嗎聪富?雖然兩者都是交通工具,但有些情況下著蟹,自行車反而更便捷墩蔓。所以 JSON 和 XML 也一樣,它們都各有所長萧豆,完全沒有必要進行比較奸披。

下面舉一個簡單的 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 是一種非常強大的語言蛛碌,而非只是單純的數(shù)據(jù)格式俊啼。相對于 JSON 和其他簡單的數(shù)據(jù)格式來說,如 YAML 左医,XML 至少有以下四個重要特性。

  • XPath

為了從文檔中得到上文類似的出版年份同木,只需要發(fā)送一個簡單的 XPath 請求:/book/published/year/text() 浮梢。但是,必須得有一個 XPath 處理器來解析請求并返回2004彤路。好就好在 XPath2.0是集 functions秕硝、predicates、axes 等為一體的強大檢索引擎洲尊,在不用 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ù))應該保存為屬性枉证,這會大大有利于組織和結構化信息。最重要的是移必,元素和屬性都可以標記為屬于某個 namespaces 室谚,當多個應用使用同一 XML 文檔時,這種技術的優(yōu)勢會非常明顯崔泵。

  • XML Schema

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

  • XSL

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

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

同時布隔,市面上還有很多以 XML 為基礎發(fā)展的語言澳腹、標準和應用江锨,包括 Xforms戏锹、 SVG、 MathML拄氯、 RDF躲查、 OWL、 WSDL 等译柏。但一般的主流項目中都不會用到镣煮,因為它們的針對性都太強。

設計 JSON 的用途并非是滿足以上特性鄙麦,盡管 JSON 領域現(xiàn)在努力嘗試典唇,包括用于查詢的 JSONPath 、一些轉換工具和用于驗證的 json-schema 胯府,但和強大的 XML 相比這只是微不足道的模仿介衔,筆者并不認為會有長遠發(fā)展,而且遲早會消失殆盡骂因。

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

(編譯自:https://dzone.com/articles/stop-comparing-json-and-xml

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

本文轉自 OneAPM 官方博客

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟆豫,一起剝皮案震驚了整個濱河市议忽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌十减,老刑警劉巖栈幸,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帮辟,居然都是意外死亡速址,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門由驹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芍锚,“玉大人,你說我怎么就攤上這事蔓榄〔⑴冢” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵甥郑,是天一觀的道長逃魄。 經(jīng)常有香客問我,道長澜搅,這世上最難降的妖魔是什么伍俘? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮店展,結果婚禮上养篓,老公的妹妹穿的比我還像新娘。我一直安慰自己赂蕴,他們只是感情好柳弄,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著概说,像睡著了一般碧注。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糖赔,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天萍丐,我揣著相機與錄音,去河邊找鬼放典。 笑死逝变,一個胖子當著我的面吹牛基茵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壳影,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拱层,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宴咧?” 一聲冷哼從身側響起根灯,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掺栅,沒想到半個月后烙肺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡氧卧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年桃笙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片假抄。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡怎栽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宿饱,到底是詐尸還是另有隱情熏瞄,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布谬以,位于F島的核電站强饮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏为黎。R本人自食惡果不足惜邮丰,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铭乾。 院中可真熱鬧剪廉,春花似錦、人聲如沸炕檩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笛质。三九已至泉沾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妇押,已是汗流浹背跷究。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留敲霍,地道東北人俊马。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓丁存,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柴我。 傳聞我的和親對象是個殘疾皇子柱嫌,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容