go语言数据库查询结果转换为自定义分组结构体详解
本文将详细讲解如何将MySQL数据库查询结果转换为Go语言中预定义的自定义分组结构体。核心在于高效处理数据分组和结构转换。
假设MySQL数据库查询结果如下:
{id:1,username:'xx',age:xx,frist_name:"a"},{id:2,username:'xx',age:xx,frist_name:"b"},{id:3,username:'xx',age:xx,frist_name:"a"},
目标是将其转换为以下Go结构体:
type myLists struct { FristName string `json:"frist_name"` Lists []userLists `json:"lists"`}type userLists struct { Id string `json:"id"` Username string `json:"username"` Age string `json:"age"`}
期望的JSON输出格式:
立即学习“go语言免费学习笔记(深入)”;
[ { "frist_name": "a", "lists": [ { "id": "1", "username": "xxx", "age": "xxx" }, { "id": "3", "username": "xxx", "age": "xxx" } ] }, { "frist_name": "b", "lists": [ { "id": "2", "username": "xxx", "age": "xxx" } ] }]
实现步骤:
定义中间结构体: 方便解析JSON数据。
type r struct { Id uint64 `json:"id"` Username string `json:"username"` Age string `json:"age"` FristName string `json:"frist_name"`}
编写数据转换函数:
package mainimport ( "encoding/json" "fmt")// ... (myLists and userLists definitions as above) ...func transformData(data []r) ([]myLists, error) { result := make(map[string]myLists) for _, item := range data { key := item.FristName if _, ok := result[key]; !ok { result[key] = myLists{FristName: key} } result[key].Lists = append(result[key].Lists, userLists{Id: fmt.Sprint(item.Id), Username: item.Username, Age: item.Age}) } var finalResult []myLists for _, v := range result { finalResult = append(finalResult, v) } return finalResult, nil}func main() { rss := []string{ `{"id":1,"username":"xx","age":"xx","frist_name":"a"}`, `{"id":2,"username":"xx","age":"xx","frist_name":"b"}`, `{"id":3,"username":"xx","age":"xx","frist_name":"a"}`, } var data []r for _, rs := range rss { var t r err := json.Unmarshal([]byte(rs), &t) if err != nil { fmt.Println("Unmarshal error:", err) return } data = append(data, t) } transformedData, err := transformData(data) if err != nil { fmt.Println("Transform error:", err) return } jsonData, err := json.MarshalIndent(transformedData, "", " ") if err != nil { fmt.Println("Marshal error:", err) return } fmt.Println(string(jsonData))}
这段代码首先使用map进行分组,避免了原代码中冗余的循环查找。 transformData 函数将中间结构体 r 的 slice 转换为 myLists 的 slice。main 函数模拟数据库查询结果,并调用 transformData 函数进行转换,最后将结果转换为 JSON 格式输出。 请将 rss 替换为实际的数据库查询代码。 记住处理潜在的错误,例如数据库连接错误和JSON解析错误。 fmt.Sprint(item.Id) 将 uint64 类型的 ID 转换为字符串,与目标 JSON 结构匹配。

以上就是Go语言中如何将数据库查询结果转换为自定义分组结构体?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1385009.html
微信扫一扫
支付宝扫一扫