YAML 和 JSON 之间有什么区别?

YAML 和 JSON 是两种数据序列化格式,提供了一种人类可读的数据交换机制。它们以标准化的方式格式化数据,以便在软件应用程序之间进行交换,其文本也可供人们读取。两者都将数据表示为键值对。JSON 支持将数据对象作为值,而 YAML 不支持。但是,YAML 支持更多的数据类型,并且更接近使用自然语言来支持开发人员使用。

了解 JSON »

数据表示:YAML vs.JSON

JSON 和 YAML 的外观和语法相似,但略有不同。

粗略看,JSON 格式在数据表示形式上比 YAML 看起来更像机器处理型。JSON 消息包含以下符号:

  • 用于对象的大括号
  • 用于分隔键值对的冒号
  • 用于数组的方括号 
  • 用于将字符串括起来的引号

JSON 是由 JavaScript 的一小部分构建而成。因此,其语法使 JSON 文档看起来与编程代码类似。
 

与 JSON 不同,YAML 格式更像是写在纸上的结构化数据。设计为便于人们阅读的形式。YAML 使用以下内容:

  • 用于表示对象的缩进 
  • 用于分隔键值对的冒号
  • 用于数组的连字符
  • 用于表示注释的哈希值

YAML 最初是为简化 XML 而构建。

文档示例:YAML vs.JSON

以下示例展示了包含衬衫产品数据的文档在 YAML 和 JSON 中的形式。

YAML

JSON

type: T-Shirt

price: 20.00

sizes:

  • S
  • M
  • L

   reviews: # 评论的附注

  • username: user1

         rating: 4

         created_at: 2023-04-19T12:30:00Z

  • username: user2

         rating: 5

         created_at: 2023-05-02T15:00:00Z

{

  "product": {

    "type": "T-Shirt",

    "price": 20.00,

    "sizes": ["S", "M", "L"]

    "reviews": {

      { "username": "user1”, "rating": 4, "created_at": "2023-04-19T12:30:00Z" },

      { "username": "user2”, "rating": 5, "created_at": "2023-05-02T15:00:00Z" }

    }

  }

}

主要区别:YAML 与JSON

因 YAML 语法的特点,人们认为它比 JSON 更容易阅读、理解和编写,尤其是对于非开发人员而言。接下来,我们将讨论其他主要区别。

数据类型

JSON 格式支持以下数据类型:

  • 编号
  • 布尔值
  • 空值
  • 字符串
  • 数组
  • 对象(嵌套键值对集合)

YAML 格式支持任何动态编程语言的所有原生数据类型。例如,它支持由序列(列表)、标量(如数字和字符串)和映射(键值对)组成的嵌套数据集合。因此您可创建更复杂的数据结构。 

内置支持

JSON 与许多不同的编程语言都有广泛的结合使用。例如,JavaScript 为解析 JSON 提供内置支持。Python 标准库还包括 JSON,PHP 5.2 中内置了 JSON 库。同样,50 多种其他的流行语言通过各种软件包和库支持 JSON。

然而,没有一种流行语言内置了对 YAML 的支持。开发人员必须安装和使用库。举例两个流行的 YAML 解析器:包括适用于 Python 的 PyYAML 和适用于 C 的 LibYAML。 

版本控制

可通过 Git 等版本控制软件同时对 JSON 和 YAML 进行版本控制。但人们认为,扫描并理解不同版本的 YAML 文件所做出的变更要更容易些。

注释

不支持 JSON 数据格式的注释。开发者必须定义一个注释键值对。

在 YAML 文件中,注释跟在哈希符号之后。

何时使用 YAML vs.JSON

由于对 JavaScript 的普遍支持和集成,JSON 在大多数用例中是一种比 YAML 更受欢迎的数据序列化格式。JSON 广泛用于分布式软件通信、Web 应用程序、配置文件和 API。

因为其数据类型的划分,以及人类可读的格式,YAML 似乎是更好的选择,但 JSON 通常是交叉兼容性的首选。这是因为许多应用程序和服务已经解析 JSON 数据格式。

另一方面,YAML 凭借其可读性和对注释的支持,在特定的计算领域获得了强大的影响力。值得注意的是,YAML 是许多自动化、DevOps 和基础设施即代码(IaC)工具和服务中配置文件的主要数据序列化格式。例如,在 Docker 和 Kubernetes 文件中经常使用 YAML。

YAML 还用于在以下 Amazon Web Services(AWS)产品中编写配置文件:AWS CloudFormationAWS Serverless Application Model(AWS SAM)AWS CodeBuild

差异总结:YAML vs.JSON

 

JSON

YAML

它是什么?

一种数据序列化格式,用于在软件应用程序和服务之间交换结构化数据。优先考虑应用程序使用,而不是人类使用。 

一种数据序列化格式,用于在软件应用程序和服务之间交换结构化数据。优先考虑人类使用,而不是应用程序使用。

主要使用案例

广泛应用于各种平台、语言、分布式软件通信、Web 应用程序、配置文件和 API。

许多自动化、DevOps 和基础设施即代码(IaC)工具和服务中的配置文件。

可读性

十分简单。

最简单。

数据类型

编号、布尔值、空值、字符串、数组和对象。

通过包含序列、标量和映射的嵌套数据集合来支持所有数据类型。

支持注释

不是。

可以。

支持将数据对象作为值

可以。

不是。

版本控制

是的,但是简单地一眼就想理解不同版本之间的差异,并不那么容易。

是的,简单扫一眼,就很容易理解不同版本之间的差异。

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

所有 AWS 数据集成服务都可以处理 JSON 文件。以下是三项相关的 AWS 服务:

  • AWS Glue 是一项无服务器数据集成服务。您可以使用 AWS Glue 发现、准备和合并用于分析、机器学习和应用程序开发的数据。
  • Amazon Simple Queue Service(Amazon SQS)是一项完全托管的消息队列服务。您可以使用它在软件组件之间以任意数量发送、存储和接收消息。Amazon SQS 消息包含不超过 256KB 的文本数据,包括 XML、JSON 和无格式文本。
  • Amazon DocumentDB(与 MongoDB 兼容)是一个完全托管的原生 JSON 文档数据库。Amazon DocumentDB 让您可以轻松且经济高效地运行几乎任何规模的关键文档工作工作负载,并且无需管理基础设施。

同样,AWS 上的开发人员工具支持多个部署服务中的 YAML 文件。以下是两个示例:

  • AWS Step Functions 可让您使用 AWS Lambda、Amazon Simple Notification Service(Amazon SNS)和 Amazon DynamoDB 等 AWS 服务构建弹性无服务器工作流程。Step Functions 还支持 YAML 状态机定义。这使得使用与基础设施即代码(IaC)相同的语言定义工作流程成为可能。
  • AWS App2Container 是一款命令行工具,您可以使用它将 Java 和.NET Web 应用程序迁移与现代化为容器格式。它为 Amazon Elastic Container Service(Amazon ECS任务定义和 Kubernetes 部署生成 YAML 文件。它还遵循 AWS 在安全性和可扩展性方面的最佳实践。

立即创建账户,开始在 AWS 上使用 YAML 和 JSON。