yamldecode 함수
yamldecode 함수
yamldecode는 문자열을 YAML의 부분 집합으로 파싱해서 그 값의 표현을 만들어 주는 함수예요. YAML 데이터를 Packer 값으로 바꿀 때 사용합니다.
출처: Packer 공식 문서
본문
yamldecode는 문자열을 YAML의 부분 집합으로 파싱하고, 그 값의 표현을 생성합니다.
이 함수는 아래에 설명된 대로 YAML 1.2의 부분 집합을 지원해요.
이 함수는 YAML 값을 다음과 같은 방식으로 Packer 언어 값에 매핑합니다.
| YAML type | Packer type |
|---|---|
| !!str | string |
| !!float | number |
| !!int | number |
| !!bool | bool |
| !!map | object(...) with attribute types determined per this table |
| !!seq | tuple(...) with element types determined per this table |
| !!null | The Packer language null value |
| !!timestamp | string in RFC 3339 format |
| !!binary | string containing base64-encoded representation |
Packer 언어의 자동 타입 변환 규칙 덕분에, 보통은 특정 값에 대해 정확히 어떤 타입이 생성되는지 신경 쓸 필요 없이 결과를 직관적으로 사용하면 돼요.
다만 위 매핑은 여러 소스 타입이 같은 대상 타입으로 매핑되기 때문에 모호하다는 점을 유의하세요. 그래서 yamldecode를 거친 다음 yamlencode로 되돌리는 왕복(round-trip)은 동일한 결과를 만들 수 없습니다.
YAML은 복잡한 언어이고, Packer 언어의 타입 시스템이 표현할 수 없는 여러 가능성을 지원해요. 그래서 이 YAML 디코더는 YAML 1.2의 부분 집합만 지원하며, 다음과 같은 제한이 있습니다.
- 이전 앵커(anchor)에 대한 별칭(alias)은 지원되지만, 컬렉션 내부에 그 컬렉션 자신에 대한 참조가 나타나는 순환 데이터 구조(cyclic data structure)는 지원되지 않아요.
yamldecode가 그런 구조를 감지하면 오류를 반환합니다. - 위 표에 나온 타입 태그(또는 그와 동등한 대체 표현)만 지원됩니다. 다른 태그는 오류를 발생시켜요.
- YAML 문서는 하나만 허용됩니다. 주어진 문자열에 여러 문서가 있으면 이 함수는 오류를 반환해요.
Examples
> 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".
더 알아보기 (Learn more)
jsondecode는 YAML 대신 JSON을 사용한다는 점만 다르고 비슷한 작업을 수행해요.yamlencode는 그 반대 작업을 수행해서 값을 YAML로 인코딩해 줘요.