From Golang spec for Json unmarshal to interface{}:
To unmarshal JSON into an interface value, Unmarshal stores one of
these in the interface value:
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays // slice of interface{}
map[string]interface{}, for JSON objects
nil for JSON null
Because the json that you are trying to unmarshal is an array so either use slice of interface{}
as mentioned in Golang spec or slice of map[string]interface{}
not map[string]interface{}
. That's why returning an error. Change your variable declaration as
package main
import (
"fmt"
"encoding/json"
)
func main() {
bytes := []byte(`[{"day":"Sunday","time_slug":1,"timing":"8:00 am - 9:00 am","count":"1"},
{"day":"Sunday","time_slug":2,"timing":"10:00 am - 11:00 am","count":"1"}]`)
var result []interface{}
if err := json.Unmarshal(bytes, &result); err != nil{
fmt.Println(err)
}
fmt.Println(result)
}
Working code on Go playground
Edited: you can also go for using structs if you know your json structure.
package main
import (
"fmt"
"encoding/json"
)
type ResultData []struct {
Day string `json:"day"`
TimeSlug int `json:"time_slug"`
Timing string `json:"timing"`
Count string `json:"count"`
}
func main() {
bytes := []byte(`[{"day":"Sunday","time_slug":1,"timing":"8:00 am - 9:00 am","count":"1"},
{"day":"Sunday","time_slug":2,"timing":"10:00 am - 11:00 am","count":"1"}]`)
var result ResultData
if err := json.Unmarshal(bytes, &result); err != nil{
fmt.Println(err)
}
fmt.Println(result)
}
Playground Example