golang json格式字符串反序列化映射到切片结构体

 

前文 : 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,"\n","",-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

 

posted @ 2020-08-13 02:16  花名k  阅读(1453)  评论(0编辑  收藏  举报