What is the best way to loop through a folder full of data files and have hugo generate a single .json file from the combined data?
data
- image-data
-
- cat-photo.yml
-
- dog-photo.yml
-
- raccoon-photo.yml
-
- yak-photo.yml
all-photos.json
What is the best way to loop through a folder full of data files and have hugo generate a single .json file from the combined data?
data
all-photos.json
The best way would probably be to create an index.json
template under your site’s layouts/
folder (create it if necessary). Include the necessary code to build the JSON inside that file. Then, in your site’s configuration file, add “JSON” to the output formats for home
. An example from my own site, where I build a JSON search index:
In the JSON file:
[
{{- $links := apply (where $.Site.Pages "Kind" "page") "partial" "search_item.json" "." -}}
{{- $clean := apply $links "chomp" "." -}}
{{ delimit $clean "," }}
]
In the configuration file:
[outputs]
home = ["HTML", "CSS", "RSS", "JSON"]
The only limitation to this method is that you can only build one .json file this way. To build multiple for different purposes, you’d have to do something different.
Hey, @jeremyzilar!
You can create a custom output type of JSON (e.g. home = ["HTML", "JSON"]
) in your config, and create a template, like index.json, with something like this:
{{- $.Scratch.Add "index" slice -}}
{{$content := .Site.Data.image-data}}
{{- range $content -}}
{{- $.Scratch.Add "index" (dict "foo" .bar ) -}}
{{- end -}}
{{- $.Scratch.Get "index" | jsonify -}}
You can look around the forums for this little construct, because it's been used quite a bit. I have some examples, too.
Posted at the same time as @Shadow53 - I’m sure that would work too, and they’re pretty similar.