JSON 与 XML 之间有什么区别?

JSON 和 XML 是应用程序之间数据交换中使用的数据表示形式。JSON 是一种开放的数据交换格式,人与机器均可读取。JSON 与任何编程语言无关,是各种应用程序中常见的 API 输出。XML 是一种提供规则来定义任何数据的标记语言。该语言使用标签来区分数据属性和实际数据。虽然两种格式都用于数据交换,但 JSON 是更新、更灵活和更常用的选项。

了解 JSON »

了解 XML »

JSON 与 XML 之间有什么相似之处?

JSON 和 XML 都是数据序列化格式。它们允许您以标准化的方式在不同的应用程序、平台或系统之间交换数据。

不同的编程语言和平台以不同的方式表示相同的数据。例如,Java 应用程序使用数据对象,Python 应用程序使用字典来存储有关同一个真实实体的信息。要在它们之间交换数据,您可以采取以下步骤:

  1. 将 Java 对象转换为 XML 或 JSON 格式
  2. 通过网络传输 XML 或 JSON 文件
  3. 将 XML 或 JSON 格式重新转换为 Python 字典

 

转换功能内置于语言库中,这使程序员能够编写使用 API 相互通信的应用程序。此外,两种格式都是自描述的,因此您可以在任何文本编辑器中读取和编辑 JSON 和 XML 文件。

尽管 XML 是一项较旧的技术,但 JSON 和 XML 仍然很常用。

数据表示:JSON 与XML

XML 以树模式表示数据,而 JSON 则使用键值对。以下示例以两种数据表示显示相同的信息。 

示例:JSON 文档

以下示例以 JSON 格式显示三位访客的姓名。

{"guests":[

  { "firstName":"John", "lastName":"Doe" },

  { "firstName":"María", "lastName":"García" },

  { "firstName":"Nikki", "lastName":"Wolf" }

]}

示例:XML 文档

以下示例以 XML 格式显示三位访客的姓名。

<guests>

  <guest>

    <firstName>John</firstName> <lastName>Doe</lastName>

  </guest>

  <guest>

    <firstName>María</firstName> <lastName>García</lastName>

  </guest>

  <guest>

    <firstName>Nikki</firstName> <lastName>Wolf</lastName>

  </guest>

</guests>

主要区别:JSON 与XML

尽管 JSON 和 XML 的用途类似,但一些核心差异使二者有所区别。了解这些差异将有助于您决定哪个对您的用例更有帮助。

历史

XML 工作小组在 1996 年构思了 XML,并于 1998 年发布了其初始版本。他们从标准通用标记语言 (SGML) 中衍生出 XML。在 1998 年引入 HTML 之后,他们开发了 XML 作为数据序列化工具。

Douglas Crockford 和 Chip Morningstar 于 2001 年发布了 JSON。他们从 JavaScript 中衍生出 JSON。

格式

JSON 使用键值对来创建类似地图的结构。密钥是一个字符串,用于识别键值对。值是您提供给该密钥的信息。例如,我们可以使用 "NumberProperty": 10。其中,"NumberProperty" 是密钥,10 是值。

相比之下,XML 是一种标记语言,即 SGML 的子集,其结构与 HTML 类似。它将数据存储在树结构中,树结构呈现您可以关注和阅读的信息层。树以根(父)元素开头,然后提供有关子元素的信息。这种扩展结构有助于加载大量变量和动态配置。 

Syntax

JSON 中使用的语法更紧凑,更易于读写。它使您可以轻松定义对象。

XML 更为详细,它用某些字符代替实体引用。例如,XML 不使用 < 字符,而是使用实体引用 &it;。XML 还使用结束标签,因此比 JSON 更长。

解析

必须使用 XML 解析器解析 XML,这通常会减慢过程并使过程复杂化。

您可以通过标准的 JavaScript 函数解析 JSON,这种函数更易于访问。由于它们的语法和文件大小存在差异,因此 JSON 的解析速度也可以比 XML 更快。

架构文档

架构文档描述了文件的用途,显示了您应该用它来做什么。

XML 文档的标题中有一个指向其架构的链接。架构也采用 XML 格式,允许您读取您应该在文件中找到的内容。然后,您可以根据架构验证文档,并检查所有内容是否已正确加载且没有错误。

JSON 还允许您使用架构。但是,它们更简单,并且具有更大的灵活性。

数据类型支持

JSON 仅支持有限范围的数据类型,例如字符串、数字和对象。JSON 还可以支持布尔数组,如果不添加其他标签,XML 就无法做到这一点。

但是,XML 更加灵活,并且支持复杂的数据类型,例如二进制数据和时间戳。 

易于使用

作为一种标记语言,XML 更为复杂,需要标签结构。

相比之下,JSON 是一种从 JavaScript 扩展而来的数据格式。它不使用标签,这使得它更紧凑,更易于人类阅读。JSON 可以在较小的文件中表示相同的数据,从而加快数据传输。

安全性

JSON 解析比 XML 更安全。

XML 的结构容易受未经授权的修改影响,这会产生一种被称为 XML 外部实体注入 (XXE) 的安全风险。它还容易受到非结构化外部文档类型声明 (DTD) 的影响。您可以通过关闭传输中的 DTD 功能来防止这两个问题。 

何时使用:JSON 与XML

如果您想存储具有许多变量的几种不同数据类型,那么 XML 是更好的选择。XML 可以比 JSON 更有效地检查复杂数据中的错误,因为 XML 侧重于以机器可读的方式存储数据。它还具有一组更成熟的工具和库,可以更好地与遗留系统配合使用。

 

另一方面,JSON 是为数据交换而设计的,它提供了一种更简单、更简洁的格式。它还提高了性能和通信速度。

JSON 通常是 API、移动应用程序和数据存储的更好选择,而 XML 更适合需要数据交换的复杂文档结构。

差异摘要:JSON 与XML

 

JSON

XML

代表

JSON 表示 JavaScript 对象表示法。

XML 表示可扩展标记语言。 

历史

Douglas Crockford 和 Chip Morningstar 于 2001 年发布了 JSON。

XML 工作小组在 1998 年发布了 XML。

形式

JSON 使用带有键值对的类似地图的结构。

XML 将数据存储在树结构中,其命名空间适用于不同的数据类别。

Syntax

JSON 的语法更紧凑,更易于读写。

XML 的语法用某些字符代替实体引用,因此更加详细。

解析

您可以使用标准的 JavaScript 函数解析 JSON。

您需要使用 XML 解析器解析 XML。

架构文档

JSON 既简单又灵活。

XML 很复杂,而且不太灵活。

数据类型

JSON 支持数字、对象、字符串和布尔数组。

XML 支持所有 JSON 数据类型和其他类型,例如布尔值、日期、图像和命名空间。

易用性

JSON 文件较小,数据传输速度更快。

XML 标签结构的写入和读取更为复杂,并且会导致文件体积庞大。

安全性

JSON 比 XML 更安全。

使用 XML 时应关闭 DTD 以降低潜在的安全风险。

AWS 如何支持您的 JSON 和 XML 要求?

所有 AWS (Amazon Web Services) 数据集成服务都可以处理 JSON 和 XML 文件。以下是三项相关的 AWS 服务:

  • AWS Glue 是一项无服务器数据集成服务,您可以用于发现、准备和合并数据以进行分析、机器学习和应用程序开发的工作。
  • Amazon SQS (Simple Queue Service) 是一种完全托管的消息队列服务,可用于在任何卷的软件组件之间发送、存储和接收消息。Amazon SQS 消息可包含不超过 256 KB 的文本数据,包括 XML、JSON 和无格式文本。
  • Amazon Kinesis 让您能够轻松地实时采集、处理和分析数据流式数据。您可以及时获得见解并快速对新信息做出反应。可以使用 Kinesis 实时流式传输、转换和分析 XML 数据。

此外,Amazon DocumentDB(与 MongoDB 兼容)是一项完全托管的本地 JSON 文档数据库。Amazon DocumentDB 让您可以轻松且经济高效地运行几乎任何规模的关键文档工作工作负载,并且无需管理基础设施。

立即创建免费账户,开始使用 AWS 上的 JSON 和 XML。