来自 Json unmarshal to interface{} 的 Golang 规范:
为了将 JSON 解组为接口值,Unmarshal 存储以下之一
这些在接口值:
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
因为您尝试解组的 json 是一个数组,所以要么使用 Golang 规范中提到的 interface{} 的切片,要么使用 map[string]interface{} 的切片而不是 map[string]interface{}。这就是返回错误的原因。将变量声明更改为
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)
}
Go playground 上的工作代码
已编辑:如果您知道您的 json 结构,您也可以使用结构。
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