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로 인코딩 해요.