Stop Comparing JSON and XML

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

JSON还是XML?哪个更好?哪个更快?在我的下一个项目中应该使用哪个?别再问了!这些东西是不可比较的。这就好像比较一辆自行车和一个AMG S65一样。说真的,哪个更好?它们都能把你从家里带到办公室,对吧?在某些情况下,自行车可能更好。但这是否意味着它们可以相互比较?同样的道理也适用于JSON和XML。它们是非常不同的东西,具有各自适用的领域。

这是一个简单的JSON数据示例(140个字符):

一个类似的文档在XML中会是这样的(167个字符)。

看起来很容易比较,对吧?第一个例子稍微短一些,更容易理解,因为它不那么“晦涩”,而且在JavaScript中也可以完美解析。就这样,让我们使用JSON,宣告XML的死亡吧!谁需要这个15年历史的臃肿XML呢?

嗯,我需要它,并且我喜欢它。让我解释一下为什么。

不要误会我,我不反对JSON。一点也不。它是一种很好的数据格式。但它只是一种数据格式。我们只是暂时使用它将数据从A点传输到B点。确实,它比XML更短,更可读。就是这样。

XML不是一种数据格式;它是一种语言。一种非常强大的语言。让我向你展示它的能力。让我基本上解释一下为什么我喜欢它。我强烈推荐你阅读Elliotte Rusty Harold和W. Scott Means的《XML in a Nutshell, Third Edition》

我相信XML有四个特性,这些特性使它与JSON或其他简单数据格式(例如YAML)有着明显的区别。

  • 属性和命名空间。您可以像上面使用id属性一样,将元数据附加到您的数据上。数据存储在元素内部,就像书籍作者的名字一样,而元数据(关于数据的数据)则应该放置在属性中。这在组织和结构化信息方面非常有帮助。除此之外,元素和属性都可以标记为属于特定的命名空间。在几个应用程序同时使用同一个XML文档时,这是一种非常有用的技术。

  • XML模式。当您在一个地方创建XML文档,在其他地方对其进行几次修改,然后将其转移到另一个地方时,您希望确保这些操作不会破坏其结构。其中一个可能使用<year>存储出版日期,而另一个可能使用ISO-8601的<date>。为了避免结构混乱,创建一个补充文档,称为XML模式,并与主文档一起发送。希望使用主文档的每个人都会首先使用提供的模式验证其正确性。这是一种在生产中进行的集成测试。RelaxNG是一种类似但更简单的机制;如果您发现XML模式过于复杂,请尝试使用它。

  • XSL。您可以在没有任何Java/Ruby等代码的情况下对您的XML文档进行修改。只需创建一个XSL转换文档并将其“应用”于原始XML。作为输出,您将获得一个新的XML。XSL语言(顺便说一句,它是纯函数式的)是为分层数据操作而设计的。它比Java或任何其他面向对象/过程化方法更适合这个任务。您可以将XML文档转换为任何内容,包括纯文本和HTML。有些人抱怨XSL的复杂性,但请试试看。您不需要全部,而它的核心功能非常直观。

这不是一个完整的列表,但这四个特性对我来说意义非凡。它们使我的文档能够“自给自足”。它可以自我验证(XML Schema),知道如何修改自身(XSL),并且为我提供了非常便利的访问内部内容的方式(XPath)。

围绕XML还有许多语言、标准和应用程序,包括XFormsSVGMathMLRDFOWLWSDL等。但在主流项目中,你不太可能使用它们,因为它们相对较“小众”。

JSON并没有设计这样的功能,尽管现在有一些尝试将它们引入JSON世界,包括用于查询的JSONPath,用于转换的一些工具,以及用于验证的json-schema。但与XML提供的功能相比,它们只是弱化的模仿,我认为它们没有未来。或者这样说吧:我希望它们早晚会消失。它们只会将一个好的、简单的格式变得笨拙

因此,总结一下,JSON是一种没有额外功能的简单数据格式。它最适合的用例是AJAX。在其他所有情况下,我强烈建议您使用XML。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-18 at 04:54

sixnines availability badge   GitHub stars