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
Top comments (0)