Unmarshal function ignores mulitline input in remote YAML data

I have a remote source which contains data & contents for blog posts, which provides its data in a YAML format such as:

-   "_id": |-
      BYTFH6yFQiiwxdr6PPPzLg
    "summary": |+
      Das Vorlesen kann eine wertvolle Aktivität für Menschen mit Demenz sein, indem es kognitive Stimulation und emotionale Verbindung bietet. Um eine optimale Vorleseumgebung zu schaffen, ist es wichtig, einen ruhigen Raum zu wählen, langsam und deutlich zu lesen und die Interaktion durch gezielte Fragen zu fördern. 

In Hugo i call this resource with the following piece of code:

{{ $url := "https://5ossn4bgjkflm6xfesabvn5cc40uuuyu.lambda-url.eu-central-1.on.aws/" }}
{{ with resources.GetRemote $url }}
  {{ with .Err }}
    {{ errorf "%s" . }}
  {{ else }}
    {{ printf "%#v" .Content }}
    {{ $data = .Content | transform.Unmarshal }}
  {{ end }}
{{ else }}
  {{ errorf "Unable to get remote resource %q" $url }}
{{ end }}

My procedure for storing this into markdown files is:

{{ $filename := printf "blog/%s_%s.md" (urlize .date_created) (anchorize .title) }}
  {{ $file := dict }}
  {{ if eq $format "json" }}
    {{ $string := print (jsonify $resource) " " .content }}
    {{ $file = $string | resources.FromString $filename }}
  {{ else }}
    {{ $yaml_template := resources.Get "resource.yaml" }}
    {{ $file = $yaml_template | resources.ExecuteAsTemplate $filename . }}
  {{ end }}
  {{ $output := $file.RelPermalink }}

The resulting markdown file looks like this:

_id: BYTFH6yFQiiwxdr6PPPzLg
language: de
summary: Das Vorlesen kann eine wertvolle Aktivität für Menschen mit Demenz sein, indem es kognitive Stimulation und emotionale Verbindung bietet. Um eine optimale Vorleseumgebung zu schaffen, ist es wichtig, einen ruhigen Raum zu wählen, langsam und deutlich zu lesen und die Interaktion durch gezielte Fragen zu fördern. 

→ so you can see that while the key-value information from the yaml input is taken over, the multiline format of the original source gets lost.
→ As a result a markdown file with missing indents are created, which cannot be processed by Hugo.

Is there a way to keep the multiline information for elements in remote yaml data?

I believe the multiline format is still contained. Keep in mind that HTML collapses the whitespace as you can see in your first snippet
wrap it in

 elements when dumping out

with this yaml file served via http://localhost:1314/multiline.yaml

---
"_id": |-
  BYTFH6yFQiiwxdr6PPPzLg

lang: de-de

"summary": |+

  Das Vorlesen kann eine wertvolle Aktivität für Menschen mit Demenz sein, 
  indem es kognitive Stimulation und emotionale Verbindung bietet. 
  Um eine optimale Vorleseumgebung zu schaffen, 
  ist es wichtig, einen ruhigen Raum zu wählen, langsam und deutlich
  zu lesen und die Interaktion durch gezielte Fragen zu fördern.
---

and this baseof.html

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Multiline</title>
  </head>
  <body>
    {{ $url := "http://localhost:1314/multiline.yaml" }}
    {{ with $resource := resources.GetRemote $url }}
      {{ $filename := "output.md" }}
      {{ $unmarshal := $resource | transform.Unmarshal }}
      <pre>
         {{ $unmarshal }}
      </pre>
      {{ $file := $resource | resources.ExecuteAsTemplate $filename . }}
      {{ $output := $file.RelPermalink }}
    {{ end }}
    {{ .Content }}
  </body>
</html>

this index.md as homepage:

# Yaml multiline

[Output](http://localhost:1313//output.md)

you will get output.md in your /public

hope that helps

UPDATE:
add call to unmarshall and screenshot to show there are newlines with the unmarshalled data structure.

I can confirm that transform.Unmarshal preserves newlines when unmarshaling a YAML resource retrieved by the resources.GetRemote function.

Try it:

git clone --single-branch -b hugo-forum-topic-49387 https://github.com/jmooring/hugo-testing hugo-forum-topic-49387
cd hugo-forum-topic-49387
hugo server
1 Like