17

ajax 请求的 json vs xml 的优缺点是什么?性能上有区别吗?即浏览器能够比另一种更快地处理一种格式吗?

4

9 回答 9

17

总之,JSON(可以被认为是 JavaScript 的一个子集)比 XML 更精简。这有几个积极的副作用

  • JSON 小于对应的 XML
  • JSON更快,即更简单的语法->更容易解析(faster parsing)

在我对这个问题的最初回答中,我对 JSON 的看法是对 JavaScript 的看法,我认为它是近亲。但是 JSON 是独立的,JSON.org在描述 JSON 方面做得很好。它还为 JavaScript 提供了一个兼容性库,增加了对浏览器的支持JSON.parse和不支持的情况。JSON.stringify

虽然eval当时(2009 年中期)用于评估 JavaScript,但它也可以评估 JSON,即解析 JSON,但它被认为是不安全的,因为它允许任意 JavaScript 代替执行。

JSON 恰好非常适合浏览器,并且由于它与 JavaScript 的密切关系,它是一种发展平台的自然方式。

虽然 XML 可能被认为具有更好的严格性,因为您可以键入它,但也正是这些东西使它变得慢了很多(我认为它也有点冗长)。但如果这是您真正想要的东西,您应该使用它,XML 同样无处不在。

我不会讨论动态或静态类型,但我会这么说。在无模式数据之上添加东西真的很容易,并且有很多方法可以进行验证,无论模式或没有模式。

于 2009-02-25T07:08:37.443 回答
17

到目前为止,我在讨论中还没有看到 XML 的一个优点是 XML 可以具有模式。这对于描述 XML 的结构非常有价值。对于简单的数据结构,JSON 和一些描述你在做什么的文本就可以了。当处理更复杂的数据结构时,或者当数据的创建者和消费者不是同一个团队时,拥有一个 Schema 可以极大地帮助沟通。

此外,拥有架构意味着您可以验证数据,这在尝试调试复杂错误时可以挽救生命......

于 2009-02-25T08:01:31.637 回答
8

您在这篇文章“ AJAX 响应:XML、HTML 还是 JSON? ”中有关于该主题的完整辩论:

XML

  • 优点
    XML 最重要的优点是它是其他人最容易阅读的格式。
    第二个优点是 XML 已经存在了很长一段时间,而且许多开发人员已经习惯了它。
  • 缺点
    将数据插入 HTML 页面所需的 JavaScript 非常冗长。

JSON

  • 优点
    最重要的优点是 JSON 绕过 JavaScript 的同源策略,如果您将 JSON 文件作为新<script>标签导入。有关血腥细节,请参见Simon Willison 的示例
    JavaScript 不允许您访问来自其他服务器的文档(无论是 XML 还是 HTML)。但是,如果您将 JSON 文件作为脚本标签导入,则可以规避此问题,并且可以将任何 JSON 数据导入任何网站。这取决于您的业务目标,这是好事还是坏事,但目前它是唯一允许无限制访问的数据格式。
    第二个优点是 JSON 数据的脚本比 XML 数据的脚本稍微简单一些,并且更符合 JavaScript 语言的其余部分。
  • 缺点
    JSON 最重要的缺点是格式很难被人类阅读,当然,每个逗号、引号和括号都应该在正确的位置。虽然 XML 也是如此,但 JSON 中看起来很复杂的语法,如数据片段末尾的 }}]} 可能会吓到新手并导致复杂的调试。

从评论来看,JSON 被认为比 XML 处理得更快。

于 2009-02-25T07:14:36.773 回答
5

尚未提及的 XML 的一个优点是,可以使用 XSLT 使用任意复杂的 XPath 表达式从 XML 文档中提取数据。我看不到在 JSON 中执行此操作的方法。无论对象在结构中出现的位置如何,如何在 JSON 文档中找到包含“货币”字段作为直接后代的所有对象?在带有 XSLT/XPath 的 XML 中,这非常容易。

但是,在浏览器中执行此操作是有代价的。您将遇到特定于浏览器的怪癖,它可能会更慢且更占用内存。

于 2009-02-26T20:47:42.380 回答
2

虽然我喜欢 Json 并会推荐它,但我认为最佳处理速度之间没有根本区别。库和平台之间的差异更为显着:好的 xml 解析器比坏的 json 解析器更快,反之亦然。所以通常格式本身的性能并不是一个大因素。两者都可以快速发光(Java 有一些很好的解析器,例如,其他语言也可能)。

至于紧凑性,这取决于数据的类型,Json 通常更紧凑,但并非完全如此。除非您有很多数组/列表,其中 json 表示法“{ ... }”比 xml 标记更紧凑(除非您尽可能使用空格,例如“1 2 3 4”)。

于 2009-02-26T20:00:19.577 回答
1

您可能想阅读JSON: The Fat-Free Alternative to XML。使用 JSON,您可以在请求的源和目标之间来回进行回调,并在您现有的 Javascript 代码中真正轻松地使用它。

于 2009-02-25T06:56:44.973 回答
1

该链接直接提供了差异的良好概要(滚动到底部)。重点是:

JSON:更小,可以表示所有 unicode 字符(xml 不能在 UTF8 中,至少,根据它自己的规范)。在 AJAX 应用程序中使用它也很简单(因为 javascript 的 eval() 函数),尤其是更高级的功能,如 jsonp(响应调用回调)。

XML:有很多工具可以轻松查询其结构。由于它更老、更成熟,它通常也有更多的工具支持。

一般来说,它们可以完成相同的事情(您可以通过 xml 执行 jsonp,它只需要手动解析回调)。

于 2009-02-25T07:09:23.650 回答
0

我认为 Json 的另一个优点是它不使用 <> 括号,您可以将 html 代码放入其中而不会造成很多混乱。

于 2013-03-02T14:38:53.183 回答
0

JSON 是轻量级的、AJAX 友好的(被视为 Javascript 的子集)并且易于序列化XML做这一切,但在喝了一些牛奶之后。

于 2015-12-19T12:54:06.177 回答