transform.Unmarshal
Syntax
RESOURCE or STRING | transform.Unmarshal [OPTIONS] ⟼ any
RESOURCE or STRING | unmarshal [OPTIONS] ⟼ any
Alias
unmarshal
The function accepts either a Resource
created in Hugo Pipes or via Page Bundles, or simply a string. The two examples below will produce the same map:
{{ $greetings := "hello = \"Hello Hugo\"" | transform.Unmarshal }}`
{{ $greetings := "hello = \"Hello Hugo\"" | resources.FromString "data/greetings.toml" | transform.Unmarshal }}
In both the above examples, you get a map you can work with:
{{ $greetings.hello }}
The above prints Hello Hugo
.
CSV options
Unmarshal with CSV as input has some options you can set:
- delimiter
- The delimiter used, default is
,
. - comment
- The comment character used in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.:
Example:
{{ $csv := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
XML data
As a convenience, Hugo allows you to access XML data in the same way that you access JSON, TOML, and YAML: you do not need to specify the root node when accessing the data.
To get the contents of <title>
in the document below, you use {{ .message.title }}
:
<root>
<message>
<title>Hugo rocks!</title>
<description>Thanks for using Hugo</description>
</message>
</root>
The following example lists the items of an RSS feed:
{{ with resources.GetRemote "https://example.com/rss.xml" | transform.Unmarshal }}
{{ range .channel.item }}
<strong>{{ .title | plainify | htmlUnescape }}</strong><br>
<p>{{ .description | plainify | htmlUnescape }}</p>
{{ $link := .link | plainify | htmlUnescape }}
<a href="{{ $link }}">{{ $link }}</a><br>
<hr>
{{ end }}
{{ end }}