前文 : https://www.cnblogs.com/zengxm/p/13488448.html
https://www.cnblogs.com/zengxm/p/13473340.html
如果业务查询返回json格式字符串,但是该字符串含有多个map,需要将字符串反序列化到切片结构体中
反序列化的结构体
貌似有个坑,如果内嵌的切片结构体被命名之后反序列化错误
mysql查询代码
var result []SelectData
SQL := "SELECT u.u_id,u.nickename,u.username, " +
"CONCAT('{"datas":[',GROUP_CONCAT('{"cid":',c.c_id,',"title":"',c.c_name,'","price":',c.price,',"info":"',c.info,'"}'),']}') as datas " +
"FROM users AS u " +
"JOIN curriculums AS c " +
"ON c.u_id = u.u_id " +
"WHERE c.c_name like '%o%' GROUP BY u.u_id"
conn.Raw(SQL).Scan(&result)
返回的结果为多个,resukt为切片,执行循环反序列化
for index,_ := range result{ result[index].JsonStr = strings.Replace(result[index].JsonStr," ","",-1) err := json.Unmarshal([]byte(result[index].JsonStr),&result[index].Mid) if err != nil { panic(err) } //fmt.Println(result[index].Mid) /* 反序列化到结构体 {[{102 0 python 学习 20 python <nil> <nil> <nil> 0} {103 0 golang 学习 70.79 go语言 gin框架 <nil> <nil> <nil> 0}]} {[{117 0 测试保存视频,视频url保存在阿里云oss上 9.99 test in <nil> <nil> <nil> 0}]} */ result[index].JsonStr = "" fmt.Println(result[index])
/*
{{100000 acfun 7745742641 0 0 <nil> <nil> 0} {[{102 0 python 学习 20 python <nil> <nil> <nil> 0} {103 0 golang 学习 70.79 go语言 gin框架 <nil> <nil> <nil> 0}]}}
{{100006 giligililllsa666 z99999es 0 0 <nil> <nil> 0} {[{117 0 测试保存视频,视频url保存在阿里云oss上 9.99 test in <nil> <nil> <nil> 0}]}}
*/
}
参考资料:https://stackoverflow.com/questions/21830447/json-cannot-unmarshal-object-into-go-value-of-type