Hi All,
I have a JSON data something like below under the content/post/post1
.
The links in the JSON changes for every post.
urls.json
{
"url": [
{ "link": "https://google.com", "label": "Google" },
{ "link": "http://gohugo.io/", "label": "Hugo" },
]
}
How do I extract?
I tried
{{ range .Site.Dir.urls.url }}
But, it didn’t work.
Can some one help me.
zwbetz
October 21, 2019, 4:31pm
3
Give this a try:
{{ $json := getJSON "content/post/post1/urls.json" }}
{{ range $json.url }}
{{ . }}
{{ end }}
Thank you for your response.
I dont know how to explain.
My url will be like
example.com/post/post1
example.com/post/post2
In relative to data,
It will be
content/post/post1/index.md
content/post/post2/index.md
My requirment is, every post will have different urls.json file under it.
urls.json
{
"url": [
{ "link": "https://google.com", "label": "Google" },
{ "link": "http://gohugo.io/", "label": "Hugo" },
]
}
Need to extract them
zwbetz
October 21, 2019, 7:21pm
6
Then you need to build your path value per-page. For example, put something like this in your layouts/_default/single.html
template:
{{ $path := printf "content/%s/urls.json" .File.Dir }}
{{ $json := getJSON $path }}
{{ range $json.url }}
{{ . }}
{{ end }}
Thanks Zachary.
Your code works for me.
One more thing.
is it possible? if the JSON file doesn’t exist, it should not display or not build.
In post 3, I don’t have a JSON file and it is giving below error.
Building sites … ERROR 2019/10/22 02:55:51 Failed to get JSON resource “content/post/post3/urls.json”: unexpected end of JSON input
For post1 and post2, I have no issues as they have JSON files.
Thanks.
Did you ever get this working? I expect so, but if not, here is how I did it. First, I’m using page bundles, and I put the JSON file in the directory of the page bundle. Then I had to tweak your JSON file to look like this
[
"url": [
{ "link": "https://google.com", "label": "Google" },
{ "link": "http://gohugo.io/", "label": "Hugo" },
]
]
Then I had a partial that did this:
{{- with .Resources.GetMatch "urls.json" -}}
{{- $json := unmarshal .Content -}}
{{- range $json -}}
<ul>
{{ range .url }}
<li><a href="{{ .link }}">{{ .label }}</a></li>
{{ end }}
</ul>
{{- end -}}
{{- end -}}
That gave me a nice list of the links and and the labels … is that what you kind of wanted?
1 Like