メインコンテンツにスキップ

yamldecode関数

yamldecodeは、文字列をYAMLのサブセットとして解析し、その値の表現を生成します。

この関数は、以下で説明するように、YAML 1.2のサブセットをサポートしています。

この関数は、以下の方法でYAML値をOpenTofu言語の値にマッピングします。

YAML型OpenTofu型
!!str文字列
!!float数値
!!int数値
!!boolブール
!!mapこの表に従って決定された属性型を持つobject(...)
!!seqこの表に従って決定された要素型を持つtuple(...)
!!nullOpenTofu言語のnull
!!timestampRFC 3339形式のstring
!!binarybase64エンコードされた表現を含むstring

OpenTofu言語の自動型変換ルールは、特定の値に対してどのような型が生成されるかを正確に心配する必要がなく、直感的な方法で結果を使用できることを意味します。

ただし、上記のマッピングはあいまいであることに注意してください。いくつかの異なるソース型が同じターゲット型にマッピングされるため、yamldecodeyamlencodeを使用してラウンドトリップしても、同一の結果を生成することはできません。

YAMLは複雑な言語であり、OpenTofu言語の型システムが表現できない多くの可能性をサポートしています。したがって、このYAMLデコーダーは、以下の制限を含むYAML 1.2のサブセットのみをサポートします。

  • 以前のアンカーへのエイリアスはサポートされていますが、循環データ構造(コレクションへの参照がそのコレクション内に現れる場合)はサポートされていません。 yamldecodeがそのような構造を検出した場合、エラーを返します。

  • 上記の表に示されている型タグ(または同じタグの同等の代替表現)のみがサポートされています。その他のタグはエラーになります。

  • 許可されるYAMLドキュメントは1つのみです。指定された文字列に複数のドキュメントが存在する場合、この関数はエラーを返します。

コードブロック
> yamldecode("hello: world")
{
"hello" = "world"
}

> yamldecode("true")
true

> yamldecode("{a: &foo [1, 2, 3], b: *foo}")
{
"a" = [
1,
2,
3,
]
"b" = [
1,
2,
3,
]
}

> yamldecode("{a: &foo [1, *foo, 3]}")

Error: Error in function call

Call to function "yamldecode" failed: cannot refer to anchor "foo" from inside
its own definition.

> yamldecode("{a: !not-supported foo}")

Error: Error in function call

Call to function "yamldecode" failed: unsupported tag "!not-supported".
  • jsondecodeは、YAMLの代わりにJSONを使用する同様の操作です。
  • yamlencodeは、逆の操作である値をYAMLとしてエンコードします。