HUGO
News Docs Themes Community GitHub

data.GetJSON

Returns a JSON object from a local or remote JSON file, or an error if the file does not exist.

Syntax

data.GetJSON INPUT... [OPTIONS]

Returns

any

Alias

getJSON

Given the following directory structure:

my-project/
└── other-files/
    └── books.json

Access the data with either of the following:

{{ $data := getJSON "other-files/books.json" }}
{{ $data := getJSON "other-files/" "books.json" }}

When working with local data, the file path is relative to the working directory.

Access remote data with either of the following:

{{ $data := getJSON "https://example.org/books.json" }}
{{ $data := getJSON "https://example.org/" "books.json" }}

The resulting data structure is a JSON object:

[
  {
    "author": "Victor Hugo",
    "rating": 5,
    "title": "Les Misérables"
  },
  {
    "author": "Victor Hugo",
    "rating": 4,
    "title": "The Hunchback of Notre Dame"
  }
]

Options

Add headers to the request by providing an options map:

{{ $opts := dict "Authorization" "Bearer abcd" }}
{{ $data := getJSON "https://example.org/books.json" $opts }}

Add multiple headers using a slice:

{{ $opts := dict "X-List" (slice "a" "b" "c") }}
{{ $data := getJSON "https://example.org/books.json" $opts }}

Global resource alternative

Consider using the resources.Get function with transform.Unmarshal when accessing a global resource.

my-project/
└── assets/
    └── data/
        └── books.json
{{ $data := dict }}
{{ $p := "data/books.json" }}
{{ with resources.Get $p }}
  {{ $data = . | transform.Unmarshal }}
{{ else }}
  {{ errorf "Unable to get resource %q" $p }}
{{ end }}

Page resource alternative

Consider using the Resources.Get method with transform.Unmarshal when accessing a page resource.

my-project/
└── content/
    └── posts/
        └── reading-list/
            ├── books.json
            └── index.md
{{ $data := dict }}
{{ $p := "books.json" }}
{{ with .Resources.Get $p }}
  {{ $data = . | transform.Unmarshal }}
{{ else }}
  {{ errorf "Unable to get resource %q" $p }}
{{ end }}

Remote resource alternative

Consider using the resources.GetRemote function with transform.Unmarshal when accessing a remote resource to improve error handling and cache control.

{{ $data := dict }}
{{ $url := "https://example.org/books.json" }}
{{ with try (resources.GetRemote $url) }}
  {{ with .Err }}
    {{ errorf "%s" . }}
  {{ else with .Value }}
    {{ $data = . | transform.Unmarshal }}
  {{ else }}
    {{ errorf "Unable to get remote resource %q" $url }}
  {{ end }}
{{ end }}