当前位置: 首页 > 科技观察

让YAML看起来很简单

时间:2023-03-21 14:50:06 科技观察

YAML看起来很简单,为什么写起来这么难?了解使用YAML取得成功的两个秘诀。如果您曾尝试编写YAML,一开始您可能会为它看起来如此简单而感到高兴。乍一看,通常用于配置文件、Ansible剧本和通用文件数据库的YAML看起来像购物清单一样直观。然而,YAML结构中的许多细微差别隐藏着一个危险的秘密:YAML实际上是一种高度精确、结构化且出奇严格的语言。好消息是你只需要知道两件事就可以知道YAML是如何工作的。YAML的真相是YAML中只有两种数据结构:序列和映射。这是两个奇特的名字,你会发现它代表了一个你非常熟悉的概念。这篇文章解释了这两种结构,更重要的是,它们如何协同工作使YAML成为一种表示您关心的数据的强大方式。YAML序列YAML序列是一个列表。在最简单的形式中,每行一个项目,每行以破折号和空格开头。下面是一个例子:----Linux-BSD-Illumos不同的语言有不同的方式来表示这个数据。例如,在Python中,同一个列表可以写成['Linux','BSD','Illumos']。当您在现实生活中写清单时,例如在你去杂货店购物之前,你写的内容可能近似于YAML序列。YAML映射YAML映射是结合了该术语定义的关键术语。在其他语言中,映射被称为“键值对”或“字典”。举个例子:---Kernel:LinuxCPU:AMDRAM:'16GB'不同的语言对这种数据有不同的表示方式。例如,在Python中,相同的数据可以写成{"Kernel":"Linux","CPU":"AMD","RAM":"16GB"}。在现实生活中,您可能会使用此结构来计划,例如,与朋友的游戏之夜。一个朋友报名带零食,另一个报名带一副纸牌,另一个报名带棋盘游戏,等等。组合序列和映射您现在知道YAML的语法了。序列和映射是YAML中仅有的两个构建块,您想要在YAML中表示的任何内容都可以放在序列或映射中。或者两者都用!是的,sequences和maps可以组合和嵌套,这也是YAML看似直观,但同时又让人感觉复杂的原因之一。不过,只有四种可能的组合,一旦您学会了如何看待它们,YAML就像它看起来一样简单。序列映射当您希望一个键有多个值时,您可以使用序列映射。也就是说,您从一个映射(键)开始,但给值一个列表:---Linux:-Fedora-SlackwareBSD:-FreeBSD-NetBSD在这个示例代码中,Linux是第一个键,它的值为A包括Fedora和Slackware的序列。第二个键是BSD,它的值是一个序列,包括FreeBSD和NetBSD。映射的映射当您希望键条目在其值中同时具有键和值时,可以使用映射的映射。也就是说,您从一个映射(键)开始,但另一个映射用于值。这可能有点欺骗性,但它揭示了为什么在YAML中使用特定术语:只是因为您只是在创建一个映射列表并不意味着您在创建一个序列。这是映射图:---台式机:CPU:RISC-VRAM:'32GB'笔记本电脑:CPU:AMDRAM:'16GB'对于大多数人来说,这看起来像一个列表。从技术上讲,它是一个列表。但重要的是要认识到它不是YAML序列。这是一张地图,其中包含地图。作为半YAML专家,您可以通过明显缺少破折号来区分差异。在Ansible剧本的所有构造中,我发现这个是最具欺骗性的。作为人类,我们喜欢列表,当我们看到一个字面上是列表的数据结构时,我们大多数人都会将其视为YAML序列。但是在YAML中,虽然序列是列表,但列表并不总是序列。SequencesofSequences就像你可以嵌套地图一样,你可以在一个序列中嵌套一个序列:----[Linux,FreeBSD,Illumos]-[YAML,XML,JSON]这可能是我在YAML中最不常见的数据结构在实践中遇到,但有时你需要一个列表列表。映射序列您还可以创建包含映射的序列。这对于人类排序数据的方式来说并不常见,但它可能是计算机的重要结构。这是一个示例:----CPU:AMDRAM:'16GB'-CPU:IntelRAM:'16GB'这可能是YAML最不直观的语法。我发现用Python渲染时更清晰:[{"CPU":"AMD","RAM":"16GB"},{"CPU":"Intel","RAM":"16GB"}]方括号表示一个列表结构,这个列表包含两个字典。每个字典都包含键值对。构建更好的YAML现在您了解了YAML的两个组件以及如何组合它们来表示复杂的数据结构。问题是:你打算用YAML构建什么?和许多人一样,我使用YAML编写Ansible剧本。我也用它作为一种简单的配置格式,作为D&D的角色表,表示项目组织所需的目录结构等。只要你能熟悉序列和映射的概念,你就会发现YAML是一种易于写入、读取和(使用正确的库)解析的格式。如果您发现自己经常使用YAML,请下载我们的YAML备忘单以帮助您可视化基本数据结构及其组成,并帮助您记住一些额外的语法约定。稍加练习,您就会发现YAML真的像它看起来的那么简单!