loading...

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 (
    "net/http"
    "encoding/json"
    "io/ioutil"
    "fmt"
)

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) 
}

Map

And how to map to another struct
https://gobyexample.com/collection-functions

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

Discussion

pic
Editor guide