数据序列化语言 YAML 使用入门

系统 Linux
YAML(YAML 不是标记语言)是一种适宜阅读理解的数据序列化语言。它的语法简单而易于阅读。它不包含引号、打开和关闭的标签或大括号。它不包含任何可能使人类难以解析嵌套规则的东西。你可以看一下你的 YAML 文档就知道它在什么。

[[425261]]

什么是 YAML,为什么我们现在应该开始使用它?

YAMLYAML 不是标记语言YAML Ain't Markup Language)是一种适宜阅读理解的数据序列化语言。它的语法简单而易于阅读。它不包含引号、打开和关闭的标签或大括号。它不包含任何可能使人类难以解析嵌套规则的东西。你可以看一下你的 YAML 文档就知道它在什么。

YAML 特性

YAML 有一些超级特性,使其优于其他序列化格式:

  • 易于略读。
  • 易于使用。
  • 可在编程语言之间移植。
  • 敏捷语言的原生数据结构。
  • 支持通用工具的一致模型。
  • 支持一次性处理。
  • 表现力和可扩展性。

我将通过一些例子进一步向你展示 YAML 的强大。

你能弄清楚下面发生了什么吗?

  1. -------
  2. # My grocery list
  3. groceries:
  4. - Milk
  5. - Eggs
  6. - Bread
  7. - Butter
  8. ...

上面的例子包含了一个简单的杂货购物清单,它是一个完全格式化的 YAML 文档。在 YAML 中,字符串不加引号,而列表需要简单的连字符和空格。一个 YAML 文档以 --- 开始,以 ... 结束,但它们是可选的。YAML中的注释以 # 开始。

缩进是 YAML 的关键。缩进必须包含空格,而不是制表符。虽然所需的空格数量是灵活的,但保持一致是个好主意。

基本元素

集合

YAML 有两种类型的集合。列表(用于序列)和字典(用于映射)。列表是键值对,每个值都在一个新的行中,以连字符和空格开始。字典也是键值对,每个值都是一个映射,包含一个键、一个冒号和空格以及一个值。

例如:

  1. # My List
  2. groceries:
  3. - Milk
  4. - Eggs
  5. - Bread
  6. - Butter
  7.  
  8. # My dictionary
  9. contact:
  10. name: Ayush Sharma
  11. email: myemail@example.com

列表和字典经常被结合起来,以提供更复杂的数据结构。列表可以包含字典,而字典可以包含列表。

字符串

YAML 中的字符串不需要加引号。多行字符串可以用 | 或 > 来定义。前者保留了换行符,而后者则没有。

例如:

  1. my_string: |
  2. This is my string.
  3. It can contain many lines.
  4. Newlines are preserved.
  1. my_string_2: >
  2. This is my string.
  3. This can also contain many lines.
  4. Newlines aren't preserved and all lines are folded.

锚点

YAML 可以通过节点锚点来获得可重复的数据块。& 字符定义了一个数据块,以后可以用 * 来引用。例如:

  1. billing_address: &add1
  2. house: B1
  3. street: My Street
  4.  
  5. shipping_address: *add1

至止你对 YAML 的了解就足以让你开始工作了。你可以使用在线 YAML 解析器来测试。如果你每天都与 YAML 打交道,那么 这个方便的备忘单 会对你有所帮助。 

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2024-01-06 10:01:53

数据序列化格式

2022-08-06 08:41:18

序列化反序列化Hessian

2009-08-24 17:14:08

C#序列化

2011-06-01 15:05:02

序列化反序列化

2023-11-20 08:44:18

数据序列化反序列化

2011-06-01 15:18:43

Serializabl

2010-01-08 13:25:07

ibmdwXML

2009-03-10 13:38:01

Java序列化字节流

2011-05-18 15:20:13

XML

2009-08-06 11:16:25

C#序列化和反序列化

2023-12-13 13:49:52

Python序列化模块

2018-03-19 10:20:23

Java序列化反序列化

2011-06-01 14:50:48

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-06-14 22:01:27

Java对象序列化反序列化

2009-08-25 14:24:36

C#序列化和反序列化

2021-01-20 08:24:38

序列化内存对象

2013-03-11 13:55:03

JavaJSON

2011-06-01 14:26:11

序列化

2009-08-25 14:43:26

C#序列化和反序列化
点赞
收藏

51CTO技术栈公众号