1、不知道结构体类型的情况下
func JsonStringToMap(jsonStr string) (map[string]interface{}, error) { //未知值类型 m := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonStr), &m) if err != nil { fmt.Printf("Unmarshal with error: %+v\n", err) return nil, err } return m, nil } res := JsonStringToMap(response.ToJsonString()) resp, ok := res["Response"].(map[string]interface{}) if ok { for _, v := range resp["Machines"].([]interface {}){ fmt.Println(v.(map[string]interface{})["Ip"]) fmt.Println(v.(map[string]interface{})["Status"]) } }
慢慢断言拆数据,属实很麻烦。
2、在知道结构体类型的情况下
func JsonStringToMap_v2(jsonStr string) { //未知值类型 var dmrp cls.DescribeMachinesResponse err := json.Unmarshal([]byte(jsonStr), &dmrp) if err != nil { fmt.Printf("Unmarshal with error: %+v\n", err) } for _,v := range dmrp.Response.Machines { fmt.Println(*v.Ip) fmt.Println(*dmrp.Response.AutoUpdate) } }
相对方便多了。
3、刚开始找了第一种办法,感觉太麻烦,之后发现第二种办法,用了第二种办法后发现在函数的返回类型里面直接可以使用未转成json串之前的数据结构,不熟悉的代价就是花时间折腾。
标签:map,string,err,fmt,golang,interface,json,字符串 From: https://www.cnblogs.com/bill2014/p/17601431.html