【问题标题】:XML and JSON -- Advantages and Disadvantages?XML 和 JSON —— 优缺点?
【发布时间】:2011-04-10 23:12:21
【问题描述】:

我最近听说了 JavaScript 对象表示法 (JSON),在查找后发现它作为可扩展标记语言 (XML) 的替代品似乎变得相当流行。

我访问了this 页面以获取更多信息,但它似乎更像是一个 XML 抨击页面,而不是一个比较页面。所以我想我应该在这里问:

与 XML 相比,JSON 有什么好处,为什么(如果有的话)我们应该选择其中一种?

【问题讨论】:

标签: xml json


【解决方案1】:
  • JSON 更紧凑,可以轻松加载到 JavaScript 中。
  • XML 更加严格,并且支持模式和命名空间。

从表面上看,JSON 似乎在各方面都更胜一筹——它灵活、更紧凑并且在许多情况下更易于使用(尤其是在使用 JavaScript 时),但它缺乏一些关键特性,尤其是:

  • 架构支持

即甲方指定文档格式的能力,以及乙方检查他们提供的内容是否与该格式匹配的能力。

在不同系统之间传递数据时,这一点至关重要,因为与预期格式的偏差可能意味着数据无法处理(或更糟的是,处理不正确)。

  • 命名空间支持

即能够在同一文档中混合打算由多个来源读取(或由多个来源写入)的数据。

这方面的一个例子是SOAP 协议 - 命名空间允许分离与序列化应用程序数据一起传递的 SOAP“信封”或“包装”数据。这允许 Web 框架处理和处理 SOAP 信封,然后将正文/有效负载数据传递到应用程序。


在开发需要快速、紧凑和方便的数据序列化的 Web 应用程序时,JSON 非常有用,但是它的灵活性使得它不如 XML 适合在不同系统之间传输数据或存储数据将由第 3 方读取。

也许这些特性会及时出现在 JSON 中,但目前 XML 是 Web 服务和文件格式等的主要格式。

【讨论】:

  • 一旦两者都被压缩,JSON 真的会更紧凑吗?
  • 甚至在某些情况下 xml 比 json 短,因为您不需要用数组包装元素集。并且在 XML 中拥有 cmets 的能力非常方便,尤其是对于配置文件。
  • 根据我的经验,JSON 也有 schema support,尽管它通常会在随附文件中提供。 XML 模式是否有一些与 JSON 模式区分开来的特性?
【解决方案2】:

JSON 的优点

  • 更小的消息大小
  • 文档中的更多结构信息
    • 可以轻松区分数字 1 和字符串 "1",因为数字、字符串(和布尔值)在 JSON 中的表示方式不同。
    • 可以轻松区分单个项目和大小为 1 的集合(使用 JSON 数组)。
  • 更容易表示空值
  • 很容易被 JavaScript 使用

XML 的优点

  • 命名空间允许共享标准结构
  • 更好的继承表示
  • 表达文档结构的标准方式:XML 模式、DTD 等
  • 解析标准:DOM、SAX、StAX
  • 查询标准:XQuery 和 XPath
  • 转换文档的标准:XSLT

绘画

  • 人类可读
  • 易于解析

【讨论】:

    【解决方案3】:

    XML

    • 可以有一个说明其格式的架构。
      • 质量控制人员对此很感兴趣。您可以证明其格式与预期相符,因此您不必像其他情况下那样在每次要引用某个字段时检查其中是否存在字段。
      • (尽管这预先假定您不遗余力地根据其架构实际验证 XML。)
    • 臃肿;每个字段名称必须写出每个字段两次。呃!

    JSON

    • 不那么臃肿,更容易解析,并且可以说更易于阅读(如果你适当地把它分开的话)。
    • 没有那么强大:表达能力不足以将属性与值分开。

    【讨论】:

    • 在 xml 中,如果没有子元素,则不需要编写结束标记。使用属性和元素集甚至可以让 xml 比 json 更短。 XML 也支持 cmets。
    • @MatthewWhited:啊,但是 cmets 在有线格式中没有位置!
    • 他们可能...
    • @MatthewWhited:自描述 API 不需要 cmets ;)
    • 祝你好运,枚举和其他验证。
    【解决方案4】:

    XML 的优点

    1. 在各种语言和框架中几乎无处不在。很可能已经有一个工具可以帮助您从 XML 响应中提取信息。

    2. 如果您愿意,它可以遵循具体的模式。验证后,您可以说它是正确的并开始解析。

    3. 命名空间允许您划分 XML。

    JSON 的优点

    1. 与 XML 相比轻量级。更少的字符 = 更短的时间通过 internet tubes

    2. 如果您需要一些 Web 应用程序的东西,使用 Javascript 更容易处理。

    【讨论】:

      【解决方案5】:

      JSON - 更小,可以作为 JavaScript 对象本地加载(速度是一个值)

      XML - 仍然是标准的,但更旧(更慢、更大,但不仅仅是 JS)

      【讨论】:

      • JSON “不仅仅是 JS”,也是。任何东西都可以支持 JSON,不管它的祖先是什么。
      • @Tomalak - 非常正确,很快就会无处不在,但最初是为 JS(JavaScript Object Notation)设计的
      • JSON 不是为 JS 设计的。它是一种从现有 Javascript 语法派生的标记语言:特别是 Javascript 的对象声明符号。
      【解决方案6】:

      JSON 是一种比 XML 简单得多的格式。 JSON 仅用于将数据描述为对象层次结构,而 XML 还有许多其他功能。

      如果您只需要发送简单的数据,那么 JSON 是一个不错的选择,因为这正是它的用途。

      如果您需要一种更强大的方式来描述您的数据,那么您将需要 XML,因为 JSON 根本不会做任何花哨的事情。

      【讨论】:

        【解决方案7】:

        它们是同样富有表现力的格式。 JSON 不那么冗长。 JSON 可以很容易地用 JavaScript(和其他语言)解析,XML 也很容易被很多东西解析。

        我认为最重要的考虑因素是什么会消耗数据 - 如果您已经有一堆 XML 解释代码,请坚持下去。如果您的所有客户都是 Web 开发人员,请使用 JSON。

        【讨论】:

        • 嗯,XML 实际上比 JSON 更具表现力。例如,它可以描述它自己的数据结构,它可以使用命名空间来划分数据,这些功能根本没有内置到 JSON 中。
        【解决方案8】:

        不那么冗长——XML 使用了比必要更多的词

        JSON 更快——解析 XML 软件既慢又麻烦。由于解析大型 XML 文件的冗长和成本,其中许多 DOM 操作库会导致您的应用程序使用大量内存。

        JSON 数据模型的结构与数据相匹配:JSON 的数据结构是地图,而 XML 是树。虽然映射(只是键/值对)可能会受到限制,但这正是我们想要的,因为它更易于解释且可预测。

        在代码中:项目在代码中的表示方式相同。在许多语言中,尤其是动态语言中,您只需“在 JSON 中啜饮”即可立即拥有您的域对象。从 JSON 中的对象到代码中的对象很容易,因为它们是对齐的。当从 XML 中的对象转换到代码中的对象时,它们不会对齐并且有很多解释空间。

        JSON 是有限的,但这是一件好事:JSON 在可以建模的对象方面是有限的。有些人可能认为 XML 更好,因为可以对更多对象进行建模,而且它并不禁止开发人员。但即使 JSON 禁止开发人员,它也是一种积极的方式,使代码更简单、更可预测且易于阅读。 XML 可以被格式化为公司希望的任何外观和功能,但它使开发人员难以阅读、理解和转换。在大多数情况下,人们认为 XML 更好,因为开发人员可以在阳光下做任何事情,但在简化的时代,少即是多,使 JSON 成为更好的选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-09
          • 2011-01-06
          • 1970-01-01
          • 1970-01-01
          • 2013-07-13
          • 2010-09-20
          • 2010-11-03
          • 2010-10-09
          相关资源
          最近更新 更多