package main import ( "encoding/json" "fmt" "log" ) var json_data = []byte(` { "name" : "Golang", "say" : ["Hello", "World!"] } `) type Data struct { Name string `json:"name"` Say []string `json:"say"` } func main() { // 方式 1, 使用结构体解析 json fmt.Println("> 1") data := Data{} if err := json.Unmarshal(json_data, &data); err != nil { log.Fatal(err) } fmt.Println(data.Name, data.Say) // 方式 2, 使用空接口解析 json fmt.Println("> 2") var i interface{} if err := json.Unmarshal(json_data, &i); err != nil { log.Fatal(err) } ndata := i.(map[string]interface{}) for k, v := range ndata { switch v := v.(type) { case string: fmt.Println(k, v, "(string)") case []interface{}: for i, u := range v { fmt.Println(i, u, " ") } default: fmt.Println(k, v, "(unkonw)") } } }