How to parse json in Go

onmyway133 profile image Khoa Pham ・1 min read

Unmarshal using encoding/json

  • property in struct needs to be first letter capitalized
import (

type MyJsonObject struct {
    Id string `json:"id"`
    Name string `json:"name"`

type MyJsonArray struct {
    Data []MyJsonObject `json:"data"`

func FetchJson() {
    url := "https://myapp.com/json"
    client := http.Client{
        Timeout: time.Second * 10

    request, requestError := http.NewRequest(http.MethodGet, url, nil)
    request.Header.Set("User-Agent", "myapp")
    response, responseError := client.Do(request)
    body, readError := ioutil.ReadAll(response.Body)

    fmt.Println(requestError, responseError, readError)

    myJsonArray := MyJsonArray{}
    marshalError := json.Unmarshal(body, &myJsonArray)
    fmt.Println(jsonResponse, marshalError) 


And how to map to another struct

func Map(vs []JsonStop, f func(JsonStop) *api.Stop) []*api.Stop {
    vsm := make([]*api.Stop, len(vs))
    for i, v := range vs {
        vsm[i] = f(v)
    return vsm

stops := Map(jsonResponse.Data, func(jsonStop JsonStop) *api.Stop {
        stop := api.Stop{
            Id: jsonStop.Id, 
            Name: jsonStop.Name,
            Address: jsonStop.Address,
            Lat: jsonStop.Lat,
            Long: jsonStop.Long}

        return &stop

Original post https://github.com/onmyway133/blog/issues/199


Editor guide