Im trying to build a []map[string]interface{} using a loop like so:
package main
import (
"encoding/json"
"fmt"
)
type People []struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
resp := `[{"name":"Test","age":15}, {"name":"Test2","age":25}]`
data := &People{}
_ = json.Unmarshal([]byte(resp), data)
m := make([]map[string]interface{}, len(*data))
for k, v := range *data {
m[k]["Name"] = v.Name
m[k]["Age"] = v.Age
}
fmt.Println(m)
fmt.Printf("%T", m)
}
But Im always getting this error:
panic: assignment to entry in nil map
goroutine 1 [running]: main.main() /tmp/sandbox300360207/prog.go:19 +0x17a
I cant use m := make(People, len(*data)) and m[k].Name = v.Name because I need the type to be []map[string]interface{} and not main.People
I also tried this:
func main() {
resp := `[{"name":"Test","age":15}, {"name":"Test2","age":25}]`
data := &People{}
_ = json.Unmarshal([]byte(resp), data)
m := make([]map[string]interface{}, len(*data))
for k, v := range *data {
m[k] = map[string]interface{"Name": v.Name, "Age": v.Age}
}
fmt.Println(m)
fmt.Printf("%T", m)
}
But got this error:
./prog.go:19:31: syntax error: unexpected literal "Name", expecting method or interface name