aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs/content/en/functions/transform.Unmarshal.md
blob: 7d0920da8fbad417aa5eecd4373e26307cff37fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
---
title: transform.Unmarshal
description: "`transform.Unmarshal` (alias `unmarshal`) parses the input and converts it into a map or an array. Supported formats are JSON, TOML, YAML, XML and CSV."
categories: [functions]
menu:
  docs:
    parent: functions
keywords: []
signature: ["RESOURCE or STRING | transform.Unmarshal [OPTIONS]"]
---

The function accepts either a `Resource` created in [Hugo Pipes](/hugo-pipes/) or via [Page Bundles](/content-management/page-bundles/), or simply a string. The two examples below will produce the same map:

```go-html-template
{{ $greetings := "hello = \"Hello Hugo\"" | transform.Unmarshal }}`
```

```go-html-template
{{ $greetings := "hello = \"Hello Hugo\"" | resources.FromString "data/greetings.toml" | transform.Unmarshal }}
```

In both the above examples, you get a map you can work with:

```go-html-template
{{ $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:

```go-html-template
{{ $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 }}`:

```xml
<root>
    <message>
        <title>Hugo rocks!</title>
        <description>Thanks for using Hugo</description>
    </message>
</root>
```

The following example lists the items of an RSS feed:

```go-html-template
{{ 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 }}
```