hugo/docs/content/en/functions/transform/Unmarshal.md
2023-10-20 09:43:56 +02:00

2.3 KiB

title description categories keywords menu function relatedFunctions aliases
transform.Unmarshal Parses the input and converts it into a map or an array. Supported formats are JSON, TOML, YAML, XML and CSV.
functions
docs
parent
functions
aliases returnType signatures
unmarshal
any
RESOURCE or STRING | transform.Unmarshal [OPTIONS]
RESOURCE or STRING | unmarshal [OPTIONS]
encoding.Jsonify
transform.Remarshal
transform.Unmarshal
/functions/transform.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 }}