解释 JSON/YAML

学习目标

  • 描述 JSON 和 YAML

业务场景

你发现自己需要为各种云原生服务创建配置文件。应该使用 JSON 还是 YAML?本课将引导你了解两者的具体细节,帮助你做出明智的决定。

什么是 JSON 和 YAML?

JSON 概述

JSON(JavaScript Object Notation)是一种用于数据存储和交换的开放标准格式。它使用易于阅读的文本来封装数据对象,这些对象由键值对和数组组成。JSON 经常用于 Web 应用程序与服务器之间的通信,是一种通用的数据交换媒介。

尽管受到 JavaScript 语法的影响,JSON 仍独立运行,并得到各种编程语言的支持。使用此格式的文件通常具有 .json 扩展名。

JSON 从根本上建立在两个关键结构之上:

  • 一组 键值对 :在多种编程语言中,这通常实现为“对象”。

  • 一系列 按顺序排列的值 :大多数语言将其解释为“数组”。

下图“描述业务伙伴的 JSON 表示”展示了一个描述业务伙伴的可能的 JSON 表示。

该图展示了一个 JSON 示例。

YAML 概述

YAML 是一种对人类友好、跨语言、基于 Unicode 的数据序列化语言,围绕敏捷编程语言的常见原生数据类型而设计。它广泛适用于从配置文件到互联网消息传递、对象持久化再到数据审计的各种编程需求。YAML 是专门为常见用例而创建的,例如以下用例:配置文件、日志文件、进程间消息传递、跨语言数据共享、对象持久化和复杂数据结构的调试。当数据易于查看和理解时,编程就变成一项更简单的任务。YAML 文件名使用扩展名 .yaml.yml

YAML 是严格的 JSON 超集,并包含额外特性,例如数据类型标记的概念、对非层次数据结构的支持、通过缩进构造数据的选项,以及多种形式的标量数据引用方式。YAML 是一种开放格式。

下图“描述业务伙伴的 YAML 表示”展示了一个描述业务伙伴的可能的 YAML 表示。

该图展示了一个 YAML 示例。

YAML 与 JSON 的关系

JSON 和 YAML 都旨在成为人类可读的数据交换格式。然而,JSON 和 YAML 有不同的优先级。

JSON 的首要设计目标是简单性和通用性。因此,JSON 的生成和解析非常简单,代价是降低了人类可读性。它还使用最低公分母的信息模型,确保任何 JSON 数据都能被每个现代编程环境轻松处理。

相比之下,YAML 的首要设计目标是人类可读性以及对任意原生数据结构进行序列化的支持。因此,YAML 允许生成可读的文件,但生成和解析更为复杂。此外,YAML 超越了最低公分母数据类型,在不同编程环境之间转换时需要更复杂的处理。

因此,YAML 可以被视为 JSON 的自然超集,提供更好的人类可读性和更完整的信息模型。在实践中也是如此:每个 JSON 文件也是有效的 YAML 文件。这使得在需要额外特性时,可以轻松地从 JSON 迁移到 YAML。

总结

现在你对 JSON 和 YAML 有了更深入的理解。

延伸阅读

  • JSON 规范

  • YAML 规范