YAML(YAML Ain’t Markup Language)是一种简洁的数据序列化格式,旨在易读且易写,广泛应用于配置文件、数据交换以及日志记录等场景。除了大家熟知的锚点(&
)和别名(*
)特性,YAML 还支持一些其他语法特性,能够帮助开发者更加高效地书写配置文件和管理复杂的数据结构。本文将对 YAML 支持的语法特性进行全方位解析。
YAML 支持的基本数据类型包括:
# 标量(基本类型)
string: "Hello, World!"
integer: 42
boolean: true
float: 3.14
# 序列(数组)
fruits:
- Apple
- Banana
- Orange
# 映射(对象)
person:
name: John
age: 30
country: USA
&
)和别名(*
)锚点和别名是 YAML 中非常强大的特性,它们允许你在文档中定义一个元素的“引用”,然后在其他地方使用这个引用。这有助于减少重复代码,提高配置的可维护性。
defaults: &defaults
color: red
font: Arial
first_object:
<<: *defaults
size: 12
second_object:
<<: *defaults
size: 14
color: blue # Override color
说明:
&defaults
创建了一个锚点,定义了 color
和 font
属性。<<: *defaults
在其他对象中引用了这些属性,避免了重复编写。<<
)<<
操作符用于将一个或多个映射的内容合并到当前的映射中。它可以和别名配合使用,也可以直接合并多个映射。
defaults: &defaults
color: blue
font: Arial
user1:
<<: *defaults
name: Alice
email: [email protected]
user2:
<<: *defaults
name: Bob
email: [email protected]
说明:
<<: *defaults
表示将 defaults
的所有键值对合并到 user1
和 user2
中。YAML 提供了两种方式来表示多行字符串:
>
符号,折叠换行符为一个空格,适用于长文本。|
符号,保留换行符,适用于多行内容。# 折叠式
folded_text: >
This is a long text
that will be folded
into a single line.
# 保留式
literal_text: |
This is a long text
that will keep the line breaks.
It's useful for multiline content.
说明:
>
将文本折叠成单行,中间的换行符被替换为一个空格。|
保留了所有的换行符。在 YAML 中,键通常是简单的标量(如字符串或数字),但它们也可以是更复杂的结构。YAML 允许使用映射和序列作为键。
{a: 1, b: 2}: value1
[1, 2, 3]: value2
说明:
a: 1, b: 2
是一个映射作为键。[1, 2, 3]
是一个序列作为键。&
和 *
)的扩展用法除了基本的锚点和别名应用,YAML 也支持对列表和映射的引用,使得它能够在复杂的配置中灵活使用。
person: &person_anchor
name: Alice
age: 30
address:
<<: *person_anchor
city: "New York"
country: "USA"
说明:
person
被定义为一个锚点,address
使用 <<: *person_anchor
合并了 person
的内容,并添加了额外的字段。YAML 在数据序列化时并不保证键的顺序。实际上,映射中的键会根据解析器的实现和语言的需求进行排序。在大多数情况下,顺序不会影响数据的正确性,但如果需要保持顺序,建议使用数组而非映射。
YAML 支持 ISO 8601 标准的日期和时间格式,提供了对日期时间值的原生支持。
date: 2025-01-01
time: 12:30:00
datetime: 2025-01-01T12:30:00
说明:
date
是一个日期,time
是一个时间,datetime
是日期和时间的组合。YAML 使用 true
和 false
来表示布尔值。对于 null
值,可以使用 null
或 ~
来表示空值。
is_active: true
is_deleted: false
empty_value: null
another_empty_value: ~
YAML 允许在字符串中使用特殊字符,例如引号、反斜杠等。在某些情况下,你需要对特殊字符进行转义。
escaped_string: "This is a \"quoted\" text"
path: "C:\\Program Files\\"
说明:
\"
是转义的引号,反斜杠 \\
是转义的反斜杠。标签(Tags)用于为数据提供类型信息,通常用于自定义数据类型。YAML 中的标签可以是内置的(如 !!str
,!!int
),也可以是自定义的类型标签。
str: !!str 123
int: !!int "123"
说明:
!!str
强制将 123
作为字符串处理。!!int
强制将 "123"
作为整数处理。YAML 中的注释使用 #
开始,注释可以放在行末,也可以占据整行。
# 这是一个注释
name: Alice # 这是另一个注释
YAML 是一种功能强大的数据序列化格式,广泛应用于配置文件、数据交换、日志管理等场景。除了锚点(&
)和别名(*
)这两个非常重要的特性,YAML 还支持多种语法特性,使得它在编写和管理配置文件时更加灵活和高效:
<<
)这些特性使得 YAML 不仅适用于简单的配置,也可以处理更复杂的结构和需求。在实际应用中,合理利用这些语法特性可以大大提升配置文件的可读性、可维护性和扩展性。