跳至主要内容

yamlencode 函数

yamlencode 使用 YAML 1.2 块语法将给定值编码为字符串。

此函数以以下方式将 OpenTofu 语言值 映射到 YAML 标记

OpenTofu 类型YAML 类型
字符串!!str
数字!!float!!int
布尔值!!bool
list(...)!!seq
set(...)!!seq
tuple(...)!!seq
map(...)!!map
object(...)!!map
空值!!null

yamlencode 对所有上述类型使用隐式语法,因此它不会生成显式 YAML 标记。

由于 YAML 格式无法完全表示所有 OpenTofu 语言类型,因此将 yamlencode 结果传递给 yamldecode 不会生成相同的值,但 OpenTofu 语言的自动类型转换规则意味着这在实践中很少成为问题。

YAML 是 JSON 的超集,因此在可能的情况下,我们建议使用 jsonencode 生成 JSON,即使远程系统支持 YAML。JSON 语法等同于流式 YAML,OpenTofu 可以为 JSON 值在计划中显示详细的结构更改信息,而 OpenTofu 会将块式 YAML 视为普通的 多行字符串。但是,如果生成的 value 将被远程系统中的用户直接读取或修改,生成 YAML 可能有助于提高可读性。

示例

代码块
> yamlencode({"a":"b", "c":"d"})
"a": "b"
"c": "d"

> yamlencode({"foo":[1, 2, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- 2
- 3

> yamlencode({"foo":[1, {"a":"b","c":"d"}, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- "a": "b"
"c": "d"
- 3

yamlencode 始终使用 YAML 的“块样式”来表示映射和序列,除非映射或序列为空。要生成流式 YAML,请使用 jsonencode,因为 YAML 流式是 JSON 语法的超集。

  • jsonencode 是使用 JSON 而不是 YAML 的类似操作。
  • yamldecode 执行相反的操作,即解码 YAML 字符串以获取其表示的值。