in

YAML与JSON:有什么区别?

作为一名开发者,你可能已经看过一些提到yaml、json或两者都提到的youtube视频或文章。这两种数据序列化格式在技术行业中被广泛用于存储、配置以及不同系统和编程语言之间的数据交换。

然而,如果你是一位初学者或对编程不太熟悉,你可能会在提到这两种格式的部分感到困惑。

这就是为什么我们编写了这篇详细的文章,以阐明yaml和json之间的区别,让事情对你更加清晰。但首先,这些缩写究竟代表什么?

yaml vs json:它们究竟是什么?

yaml,全称为“yaml不是标记语言”或“yet another markup language”(根据某些人的说法),是一种用于数据序列化的多功能和表达性强的数据格式。它旨在在易读性和可机器解析性之间取得平衡。

它的语法允许使用缩进和空格对数据进行更轻松和表达性强的表示。yaml文件通常类似于结构化文档,并且已经成为开发者配置文件的首选。

另一方面,json,或“javascript对象表示法”,是一种非常流行、高效和轻量级的数据交换格式。受到javascript对象字面量的启发,json具有非常简单和简洁的语法,侧重于数据和键值对。

由于易用性和与多种编程语言的兼容性,它已成为web api的事实标准。现在我们对它们有了一个概念,让我们将yaml和json进行对比,试着理解每种格式的复杂性。

yaml vs json:并排比较

yaml json
语法 使用缩进和空格 使用大括号和逗号
可读性 更易读,类似于文档 更简洁和机器可读
注释 允许注释 不支持注释
顺序 元素的顺序很重要 元素的顺序不重要
内联引用 支持内联引用 不支持内联引用
可扩展性 支持添加新属性/类型 不支持添加新属性/类型
编程语言支持 有多种语言的解析器可用,如python和ruby 在javascript和python等多种语言中广泛采用和支持
应用 配置文件,脚本,自动化 web开发,api,配置文件
兼容性 docker,flutter,google cloud的常见选择 web开发和数据交换的常见选择

json vs yaml:有何区别?

了解这些区别可以帮助你确定在特定情况下使用哪种格式,而不是另一种。让我们深入了解它们之间的主要区别。

语法和可读性

yaml使用缩进和空格来组织数据,正如前面提到的。这使得它更易读,类似于文档,这对于试图理解数据的人们来说是有帮助的。为了让你有所了解,假设你正在整理一个购物清单。在yaml中,你会用空格列出你的物品,创建如下表示:

fruits:
  - apple
  - banana
  - orange

这就是你可能会在纸上记下清单的方式。在yaml中,缩进有助于显示数据的层次结构,而间距使得代码易于扫描。

与此同时,json使用大括号和逗号来定义其结构。这使得它更紧凑并且易于机器阅读。我们将之前的清单在json中表示如下:

{
  "fruits": ["apple", "banana", "orange"]
}

大括号和逗号清楚地显示了数据的结构,而缺少空格使得程序更容易解析。

总体而言,json的设计目标是尽可能简单和通用,这在一定程度上降低了数据的可读性。

相比之下,yaml的设计目标是提供一种良好的人类可读格式和对序列化任意原生数据结构的支持。

注释

与语法和可读性密切相关,注释是这两者采取不同方法的另一个领域。yaml的灵活性允许您添加注释,这样可以更容易阅读和理解代码,包括在代码中包含有用的提示和解释。

ingredients:
  - flour  # 别忘了筛一下,以获得更光滑的质地!
  - sugar  # 多一点甜味从来没有伤害过任何人
  - eggs   # 记住要打到蓬松

yaml甚至允许多行注释:

# 这是yaml中的多行注释
# 你可以用尽需要的行数
# 来解释代码的每个部分是做什么的

相反,json不提供添加注释的方式,选择保持整洁和简明。您需要花时间理解以json格式表示的复杂数据。

顺序

在json中,元素的顺序并不重要。这意味着您可以以任何顺序重新排列元素,json仍然有效。这对于灵活性很有帮助,因为您可以更改元素的顺序,而无需更改解析json的代码。

然而,这也可能使得一眼就能辨认json结构变得更加困难,因为元素的顺序不是数据结构的可靠指示器。

yaml通常用于配置文件和存储或传输数据的应用程序。

©maria vonotna/shutterstock.com

另一方面,在yaml中,元素的顺序很重要,创建了一种一致且可预测的结构。因此,yaml文件更加一致,但也可能更难更改。

正是这种一致性赋予了yaml文件内在的清晰度,使开发人员能够轻松理解结构。

虽然yaml强调顺序带来了一致性,但在yaml文件中改变元素的顺序可能会稍微复杂和具有挑战性。您不能简单地重新排列元素,而不影响文件的结构和完整性。

内联引用

yaml允许内联引用,这对于减少代码中的重复可以很有用。例如,您可以在一个地方定义一个变量,然后在代码的其他地方引用它。

json不支持内联引用。下面是yaml中内联引用的示例:

people:
- name: john doe
  age: 30
  favorite_color: &color blue
- name: jane doe
  age: 25
  favorite_color: *color

在这个例子中,变量color只定义了一次,然后引用了两次。这可以帮助减少代码中的重复,使其更容易维护。

以下是如何在json中表示上述数据的一种方式:

{
  "people": [
    {
      "name": "john doe",
      "age": 30,
      "favorite_color": "blue"
    },
    {
      "name": "jane doe",
      "age": 25,
      "favorite_color": "blue"
    }
  ]
}

在这里,favorite_color属性的值重复了两次,因为不支持内联引用。这种重复使得这样的json数据更难以阅读和维护。

可扩展性

就可扩展性而言,json是不可扩展的。这意味着您不能以直接的方式向json数据中添加新属性或类型。如果您需要向json添加新数据,您需要创建一个新的json对象。

如果您需要向现有的json文件添加新数据,这是很不方便的。yaml允许您向yaml数据添加新属性和类型。当您需要向现有的yaml文件添加新数据时,这真的很有帮助。

编程语言支持

json在各种编程语言中得到广泛采用和支持。这是因为json是普遍使用的javascript的一个子集。json在web开发中的广泛应用使其在可用资源和社区支持方面具有优势。

yaml也是多才多艺的,在开发者圈子中得到了广泛支持。yaml解析器可用于许多语言,包括python,ruby,java等。

然而,json的简单和直接使其易于与各种编程语言集成,包括python、c++、php等。它是一个与编码生态系统无缝衔接的语言无关的伙伴。

yaml和json都提供了简化在不同编程语言中处理它们各自格式的库和工具。从序列化和反序列化到验证和操作,您会找到强大的支持和专为您的编程需求量身定制的库。

简而言之,json在web开发中的流行和普及使其在可用资源和社区支持方面稍占优势。它与javascript的兼容性使其成为与web相关项目的自然选择。

应用

yaml和json在不同的用例中发挥作用。让我们更仔细地看看其中一些。

json

由于其简单性和兼容性,json在多个领域都表现出色。它广泛用于web开发中,在服务器端和客户端之间传输数据时作为首选格式。

通过其轻量级结构和易于阅读的语法,json无缝地促进数据交换,使其成为api的理想选择。它实际上是许多流行的网络服务的基础,如社交媒体,可以在不同系统之间实现无缝通信。

json源自javascript,但许多编程语言都包含生成和解析json格式数据的代码。

©maria vonotna/shutterstock.com

json还广泛用于配置文件。其直观的特性使其非常适合在软件应用程序中定义设置和参数,包括像npm和composer这样的软件包管理器。

firebase和其他基于文档的数据库依赖于它进行数据交换。此外,它还适用于配置工具(如vs code),允许开发人员轻松指定数据库连接、应用程序首选项和系统配置。

yaml

yaml最适合需要用户友好和表达能力的数据表示的场景。它在配置文件中具有出色的功能,以定义复杂结构。

它的可读性和处理嵌套数据结构的能力使yaml成为配置管理的卓越选择,特别是在涉及复杂设置或复杂编排的项目中。

它在脚本和自动化中有用途,用于定义工作流程、自动化任务和序列化数据。其清晰且直观的语法,以缩进和破折号为特征,促进了脚本的易理解性和维护性。

因此,yaml成为强大工具(如ansible)的首选格式,在这些工具中,它充当了一个声明性语言,精确描述基础设施即代码。

这种灵活性和多功能性延伸到流行的技术,如docker、flutter和google cloud。yaml的用户友好特性和对复杂结构的支持使其成为配置docker容器的理想选择,使开发人员能够轻松定义容器化环境。

同样,在flutter的背景下,yaml使开发人员能够无缝指定项目配置和依赖项。google cloud利用yaml来定义基础设施设置、编排资源和简化部署流程。

yaml vs json: 7个必知事实

  1. yaml于2001年由clark evans、ingy döt net和oren ben-kiki首次推出,旨在创建一种比xml更易读的格式。
  2. json的创建者douglas crockford最早于2001年开发了这种格式,作为在web应用程序和web服务器之间存储和传输数据的一种方式。然而,直到2002年,json才作为一个开放标准向公众发布。
  3. yaml和json都是与语言无关的,可以与支持它们的解析器和序列化器的任何编程语言一起使用。
  4. 虽然yaml通常用于配置文件和数据交换,但json广泛应用于web api和客户端与服务器之间的数据传输。
  5. yaml是json的超集,这意味着任何有效的json代码都可以(至少在理论上)被yaml编译器解析。
  6. yaml支持更复杂的数据结构,如列表和关联数组,而json无法处理它们。
  7. json比yaml更紧凑,解析速度更快,更适用于机器之间的通信,因此在web api中使用。

现在,我们已经详细了解了这两种格式,你可能正在开始一个新项目,并想知道应该选择哪种格式。以下是一些建议。

yaml vs json:哪个更好?我应该选择哪个格式来进行我的项目?

你的选择主要取决于使用yaml还是json进行数据序列化和数据交换的上下文。基本上,json最适合于web开发和数据交换场景,而yaml适用于配置文件和复杂数据表示。

json的轻量级和兼容性使其成为api常用的选择,而yaml的可读性和表达能力使其成为配置管理、脚本编写和自动化任务的顶级竞争者。

如果你开始一个严重依赖于基于json的技术(如firebase)的项目,那么显然不适合使用yaml。其广泛应用于突出技术,如docker和kubernetes,使开发人员能够简化工作流程并实现高效可靠的结果。

考虑到这些差异,当然还要根据项目中使用的特定技术和框架来进行选择,现在你应该能够更好地选择其中之一了。

Written by 小竞 (编辑)

他们称呼我为小竞, 做作为河小马的助理有5年时间了,作为jingzhengli.com的编辑,我关注每天的科技新闻,帮你归纳一些现有科技以及AI产品来提升你的生产力,拥抱AI,让科技和AI为我们服务!