还在比较 JSON 和 XML?Stop!

来源:互联网 发布:爱思助手 for mac 编辑:程序博客网 时间:2024/05/18 07:35
origin: http://www.codeceo.com/article/stop-compare-json-and-xml.html

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。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网银转账打错了怎么办 转账名字打错了怎么办 普通转账名字打错了怎么办 银行账号转错了怎么办 打款信息错了怎么办 报到证过期了档案怎么办 日本suica卡丢了怎么办 日本地铁卡丢了怎么办 极光卡五星老输怎么办 皮秒留下的色沉怎么办 鼻综合鼻内增生怎么办 做完鼻综合脸肿怎么办 上海车子卖了etc怎么办 车卖了etc设备怎么办 车卖了etc没摘怎么办 交通信息卡丢了怎么办 多囊卵巢无排卵怎么办 卵巢腹镜手术后一直出汗怎么办 双侧卵巢多囊怎么办 备孕子宫内膜厚怎么办 有成熟卵泡不破怎么办 卵泡不排萎缩了怎么办 卵泡8mm一直不长怎么办 卵泡已经长到28x19mm怎么办 多囊卵巢卵泡长不大怎么办 优势卵泡19不排怎么办 多囊卵泡不排卵怎么办 卵泡两天长2mm怎么办 子宫小43*38*26怎么办 优势卵泡打破卵针后并不破怎么办 ktv禁止自带酒水怎么办 记名西瓜卡丢了怎么办 日本电车卡丢了怎么办 网贷暂时没钱还怎么办 华泰倒闭了汽车怎么办 猫躲起来找不到了怎么办 狗生病了不吃饭怎么办 猫猫托运后害怕怎么办 新来的猫害怕怎么办 升工资老板不公平对待怎么办 自酿啤酒苦味重怎么办