XML和JSON瞎掰

XML 跟 JSON 的圣战,或许会成为自 vim/emacs 圣战,cli/gui 圣战等等圣战以来的又一个圣战,而所有的圣战大抵都不会有结果,因为每方都有各自的道理,谁都不服谁。

在我看来,XML 更适合数据定义,数据存储。它对数据的表达使得这个数据脱离你程序的上下文仍然存在意义并且可以被解读。所以 XML 适合作为配置文件,以及数据存储,存盘文件格式等等。


JSON 更适合数据传输。对于传输而言,双方必然需要遵循协商好的协议,因而 JSON 对数据的表达并不需要在数据传输的双方以外仍然具有可解读的意义,只要传输的双方能读懂即可。所以 json 更适合作为数据传输双方的通信协议。

如果把用途局限在数据传输这个领域,则 XML 没有任何优势。唯一可能的优势或许是,如果你的数据本来就是使用 XML 组织和定义的,直接使用 XML 传输会更方便。


这个问题如今是个政治问题,说什么都会有人反对。我只能说个人看法,那就是:如果谈数据传输,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瞎掰相关推荐

  1. XML和JSON数据格式对比

    概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...

  2. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

  3. XML和JSON 数据交换格式

    为什么80%的码农都做不了架构师?>>>    一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...

  4. Java实现xml和json互转

    pom.xml: <!-- 使用staxon实现xml和json直接互转 --><dependency><groupId>de.odysseus.staxon< ...

  5. XML,Object,Json分析转换Xstream采用

    XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库.主要用 ...

  6. XML转JSON的javascript代码

    为什么80%的码农都做不了架构师?>>>    下面是神奇的XML转JSON的javascript代码: // Changes XML to JSON function xmlToJ ...

  7. 【科普】:10分钟看明白XML和JSON

    引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...

  8. xml 和 json 序列化忽略字段

    xml 和 json 序列化忽略字段: @JsonIgnore@XmlTransient 转载于:https://www.cnblogs.com/xiluhua/p/9192577.html

  9. xml转json和实体类的两种方式

    本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...

最新文章

  1. 并非所有图像都值16x16个词--- 清华华为提出一种自适应序列长度的动态ViT
  2. word中复制、双击打开编辑公式(Axmath/mathtype)出现卡死(无响应)现象的解决方案
  3. oracle xe 连接数据库,【Oracle XE系列之二】PLSQL Developer 远程连接Oracle XE数据库-Go语言中文社区...
  4. setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
  5. Linux 命令查找指定文件夹下符合查询条件的文件和文件夹实例演示
  6. GDCM:ReadUpToTag的测试程序
  7. ajax能运用到app吗,Jquery之Ajax运用 学习运用篇
  8. 智能会议系统(32)---WebRTC学习之三:录音和播放
  9. JAVA回合制pk游戏
  10. asp html css样式,aspupload
  11. 【最佳实践】瀚高数据库 Windows企业版v6.0.4 的安装
  12. C语言每日一练 —— 第21天:算法的应用
  13. Exp3 免杀原理与实践 ——20164316张子遥
  14. 2012-2-25 《数据结构》读书笔记3 栈之迷宫求解
  15. 我深爱的Java,对不起,我出轨了!!!呸!渣男!
  16. Java文本控件型号_小博老师解析Java核心技术 ——JSwing文本型控件
  17. 0x80073712_win10系统更新提示错误代码“0x80073712”的解决方法
  18. JAVAEE面试指导
  19. Java 常用类 Math类的使用教程
  20. modelsim仿真系列之基于ISE的独立进行后仿真(三)

热门文章

  1. nginx 根据域名转发本机端口
  2. 万用表可以测量自身的电池电压吗?
  3. apple键盘中的Tilde / back-tick key can't work
  4. 关于兔子生兔子,牛生牛,鸡生鸡。。。若干年后一共多少只的问题
  5. 2012第17周移动应用榜单变化
  6. 好评论:解析大话西游当年票房为何惨淡,却是他评价最高的一部经典佳片
  7. 远程桌面文件传输异常处理(rdpclip.exe)
  8. c语言队列实现FIFO
  9. Mysql多对多查询
  10. 在线html 浏览器,25个基于浏览器的HTML在线编辑器集合