Skip to content

YAML – 流式映射

在 YAML 中,数据结构可以用两种主要风格表示:块状风格(block style)(使用缩进)和流式风格(flow style)(更紧凑,通常是内联的)。流式映射(flow mappings)是块状映射(block mappings)的流式风格等价物,它们表示用花括号 {} 括起来的无序键值对(key-value pairs)集合,类似于字典、对象或关联数组(associative arrays)。

流式映射的主要特点:

  • 用花括号 {} 括起来:{ key1: value1, key2: value2 }。
  • 键值对之间用冒号和一个空格(: )分隔。
  • 多个键值对之间用逗号和一个空格(, )分隔。
  • 在一个映射中,键必须是唯一的。重复的键通常会导致错误,或者根据 YAML 解析器(parser)的不同,后面的键会覆盖前面的键。
  • 流式映射常用于简单、紧凑的对象表示,类似于 JSON 对象(JSON objects)。

这是一个演示流式映射的示例。我们将使用这种风格定义一个用户资料:

# YAML 1.2
user_profile: { name: "John Doe", age: 30, city: "New York" }
# Flow mappings can also span multiple lines for readability
contact_details: {
email: "john.doe@example.com",
phone: "123-456-7890"
}
# Flow mappings can be nested
preferences: {
theme: "dark",
notifications: { email: true, sms: false }
}

上面 YAML 内容的等效 JSON 表示(JSON representation)如下:

{
"user_profile": {
"name": "John Doe",
"age": 30,
"city": "New York"
},
"contact_details": {
"email": "john.doe@example.com",
"phone": "123-456-7890"
},
"preferences": {
"theme": "dark",
"notifications": {
"email": true,
"sms": false
}
}
}

注意流式映射是如何直接转换为 JSON 对象的。当您需要紧凑的表示或在较大结构中嵌入一个小映射时(甚至可以在流式序列中作为值),它们特别有用。

使用流式映射的场景:

  • 简单、小的对象,内联表示更清晰。
  • 与 JSON 对象非常相似的数据。
  • 在其他流式结构中嵌入小映射,或甚至在块状结构中作为值使用。

使用块状映射(基于缩进)的场景:

  • 更大、更复杂的对象,可读性从显式缩进中获益。
  • 涉及多行字符串值时,因为块状标量(block scalars)与块状映射集成得更自然。

选择哪种风格通常取决于数据的可读性和复杂性。许多 YAML 文档会同时使用这两种风格。