XML在數據傳輸哪些方面會比JSON有優勢,在哪些領域更加適合?
Json 數據存儲量更小,而且解析效率上也比XML解析更為快速,甚至乃至在可讀性上(見仁見智)會更為簡潔易讀。那是否Json已完全取代XML在數據傳輸中的位置呢?XML在哪些方面會比Json更為出色?
謝謝邀請。
這個問題如今是個政治問題,說什麼都會有人反對。我只能說個人看法,那就是:如果談數據傳輸,XML 相對 JSON 沒有任何優勢,從一開始就是如此。
很多當下的 XML 支持者可能都忘了,XML 一開始不是為網路傳輸設計的,而是為了替代 HTML。所以它才會如此強調結構化(相對 HTML 4 的混亂結構而言容易分析)和格式中內建編碼信息(便於跨國數據交換)。但是 XML 誕生後在這方面一直不溫不火,也就在 XHTML 中略有建樹。其它的應用雖然也有,比如 MathXML、XSLT 之類,也都不算被廣泛應用。直到後來 RSS 和 ePub 流行,XML 才算找回來一些原本的方向。
XML 開始流行的具體歷史已經難以考證,只知道是乘了 Java 企業應用和 DOM (文檔對象模型)標準的東風。Java 企業應用中 XML 經常被用來做如下用途:配置文件和傳輸格式(SOAP,簡單對象傳輸協議)。隨著 Java 應用的增加,XML 的應用也在拓寬,但總體上超不出這兩方面。
如果只是作為鍵值對類型配置文件的格式,XML 並不優秀,它的問題就是包含了太多對真正數據傳輸無用的東西,用計算機世界的術語,就是 Payload 不夠高。比如到處存在的尖括弧,比如層級式的標籤結構,比如 DTD/Schema。最基本的問題在哪裡?帶寬。這裡的每一個位元組都會成為傳輸帶寬的負擔。唯一的好處是 DOM 解析器幾乎到處都是,但相對於 JSON 來說,這個優勢也不復存在。
整體上看,我是樂於見到 JSON 代替 XML 的。不是因為 XML 失勢,而是整個程序開發世界終於可以以一種理性的眼光看待手中的工具了。XML 自有它的用途,比如 ePub,比如 SVG。當然它也仍然可以用於數據傳輸,比如我的 blog 頁面。但我們何必非糾結於數據傳輸這區區一個用途呢。同意 陳甫鵃 的看法。
XML 跟 JSON 的聖戰,或許會成為自 vim/emacs 聖戰,cli/gui 聖戰等等聖戰以來的又一個聖戰,而所有的聖戰大抵都不會有結果,因為每方都有各自的道理,誰都不服誰。
在我看來,XML 更適合數據定義,數據存儲。它對數據的表達使得這個數據脫離你程序的上下文仍然存在意義並且可以被解讀。所以 XML 適合作為配置文件,以及數據存儲,存檔文件格式等等。
JSON 更適合數據傳輸。對於傳輸而言,雙方必然需要遵循協商好的協議,因而 JSON 對數據的表達並不需要在數據傳輸的雙方以外仍然具有可解讀的意義,只要傳輸的雙方能讀懂即可。所以 json 更適合作為數據傳輸雙方的通信協議。
如果把用途局限在數據傳輸這個領域,則 XML 沒有任何優勢。唯一可能的優勢或許是,如果你的數據本來就是使用 XML 組織和定義的,直接使用 XML 傳輸會更方便。
數據傳輸跟數據存儲的側重點本來就不同,即便是 UNICODE 對於傳輸與存儲也是兩種不同的編碼,所以個人覺得沒有必要始終執著於把一個更適合數據存儲的格式用於數據傳輸。
作為一個年輕人,剛剛算是入行 (都不算是入門),對於這兩種數據格式的理解 僅僅局限於:json 這玩意一看就懂,簡單好用。xml:這什麼玩意。。。還得解析。算了我還是用json吧。。。
上面幾位已經說得比較清楚了,首先XML是SGML的一個簡化版本,當初設計的目的就是保留SGML的特性,但是要讓它變得更加簡單。在當時的條件下,XML很好的實現了這一目的,並且由XML衍生出一些類工具類庫來更好的交換數據,比如JDOM,dom4j,目前XML是W3C的標準,這一點已經說明了其巨大的作用……
相比於JSON,XML不能更好的適用於數據交換,它包含了太多的包裝, 而且它跟大多數編程語言的數據模型不匹配,讓大多數程序員感到詫異,XML是面向數據的,JSON是面向對象和結構的,後者會給程序員一種更加親切的感覺。XML易讀,JSON更易讀;XML將數據和表示分離,JSON同樣可以分離;
XML擁有廣泛的應用,JSON誕生不久就捕獲了相當一部分程序員的心;只有一個方面JSON比不了XML,就是可擴展性我們現在一般這樣來使用:
1、XML 存儲數據,存儲配置文件等需要結構話存儲的地方使用;
2、數據傳輸、數據交互使用JSON;一看到xml就頭暈
因為要看你的前台使用的是什麼js,像是EXTjs,能夠自動解析json,這樣就方便了,何必用xml了,這種東西,借用愛情公寓里的一句話:不是看你能給什麼,而是看它需要什麼?如果它需要json,你後台返回json數據的格式就行了唄
如果就數據傳輸來講,真的沒有任何優勢。
大家基本把該說的都說了,我就再多吐個槽。看日誌的時候,真的很討厭xml,看起來真的好費勁啊啊啊啊啊啊啊啊啊啊啊可以這樣類比:XML是一種強類型的靜態語言(如果用好的話),而JSON則是一種弱類型的動態語言
- XML的結構嚴謹,適合機器閱讀
- 通過DTD、Schema可定義出語義清晰的DSL,它是自描述的,如JEE Web、EJB,包括Ant、Maven(當然那時候還沒有DSL這麼時髦的詞)
所以XML用於數據交換還是蠻合適的,尤其是跨組織的數據交換。當然劣勢也很明顯,數據傳遞帶寬利用率低,給人閱讀又顯得太啰嗦。
跟選擇Java還是Python一樣,還是要根據系統的要求來考慮,數據語義/校驗的要求 vs 精簡/易讀,看系統對哪些選項更敏感一些。
ps. 不喜歡聖戰說,技術多樣性和生物多樣性一樣,是天經地義的事情,有利於進化推薦閱讀:
※如何解决 Ajax 跨域请求不到的问题?
※訪問localhost和127.0.0.1是否完全一樣?
※知乎網站的性能都有些什麼瓶頸?可以以何種技術和方式解決?
※學習Ajax,關於XMLHttpRequest對象是怎麼從後台和伺服器交換數據的不太理解?
TAG:程序員 | JavaScript | 編程 | Ajax | XML |