yamldecode 함수
yamldecode 함수
yamldecode 는 문자열을 YAML의 부분집합으로 파싱해서 그 값의 표현을 만들어요.
출처: 문서
본문
yamldecode 는 문자열을 YAML의 부분집합으로 파싱해서 그 값의 표현을 만들어요. 이 함수는 YAML 1.2 의 부분집합을 지원하며, 자세한 내용은 아래에서 설명해요.
이 함수는 YAML 값을 Nomad 언어 값 들로 다음과 같은 방식으로 매핑해요:
| YAML type | Nomad type |
|---|---|
!!str |
string |
!!float |
number |
!!int |
number |
!!bool |
bool |
!!map |
이 표에 따라 속성 타입이 결정되는 object(...) |
!!seq |
이 표에 따라 요소 타입이 결정되는 tuple(...) |
!!null |
Nomad 언어 null 값 |
!!timestamp |
RFC 3339 형식의 string |
!!binary |
base64 인코딩 표현을 담은 string |
Nomad 언어의 자동 타입 변환 규칙 덕분에, 주어진 값에 대해 정확히 어떤 타입이 만들어지는지 보통 걱정할 필요가 없고, 결과를 직관적으로 사용하면 돼요.
다만 위 매핑은 모호하다는 점에 유의해요 — 몇몇 다른 소스 타입이 같은 대상 타입으로 매핑되므로 — yamldecode 를 통과시킨 다음 yamlencode 로 왕복(round-trip)해도 동일한 결과를 만들 수 없어요.
YAML은 복잡한 언어이고 Nomad 언어의 타입 시스템이 표현할 수 없는 여러 가능성을 지원해요. 따라서 이 YAML 디코더는 YAML 1.2의 부분집합만 지원하며, 다음과 같은 제한이 포함돼요:
- 이전 앵커(anchor)에 대한 별칭(alias)은 지원되지만, 순환 데이터 구조(컬렉션에 대한 참조가 그 컬렉션 안에 나타나는 것)는 지원되지 않아요.
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로 인코딩 해요.