登录
首页 >  Golang >  Go问答

在 Go 中使用 Mysql 创建父子嵌套 json

来源:stackoverflow

时间:2024-04-15 14:27:37 474浏览 收藏

哈喽!今天心血来潮给大家带来了《在 Go 中使用 Mysql 创建父子嵌套 json》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我正在使用 mysql 数据库和 golang (go)。下面是我的树视图的数据库结构

screenid        parentid        screenname

1                0               home

2                0               run records

3                0               requests

4                3               ndr

5                4               add ndr request

我使用的结构是:

type screens struct {
    productid int
    parentid   int
    screenname string
    children []screens
}

下面是我的golang代码

db, err := sql.open("mysql", username + ":" + password + "@tcp(127.0.0.1:3306)/" + dbname)

rows, err := db.query("call usp_select_screens(1)")

for rows.next() {
err := rows.scan(&screens.productid, &screens.parentid, &screens.screenname)

我正在尝试将查询结果存储为 json。我需要指导获取输出并将其编组为以下形式的 json:

[  
     {  
        "ParentId":"0",
        "ScreenId":"1",
        "Name":"Home"
    },
    {  
        "ParentId":"0",
        "ScreenId":"2",
        "Name":"Run Records"
    },
    {  
        "ParentId":"0",
        "ScreenId":"3",
        "Name":"Requests",
        "Children":[  
            {  
                "Name":"NDR",
                "ScreenId":"4",
                "ParentId":"3",
                "Children":[  
                    {  
                        "Name":"Add NDR Request",
                        "ScreenId":"5",
                        "ParentId":"4"
                    }
                ]
            }
        ]
    }
]

解决方案


通常我会为结构体分配标志,然后您可以轻松地使用 json.marshal 将结构体转换为 json 格式。

将您的结构更新为:

type screens struct {
    parentid int      `json:"parentid" db:"parentid"`
    screenid int      `json:"screenid" db:"screenid"`
    name     string   `json:"name" db:"screenname"`
    children []screens `json:"children,omitempty"`
}

然后将数据扫描到结构体中:(未测试)

for rows.next() {
    if err := rows.scan(&screens); err != nil {
        // break and handle err
    }
}

然后转换为 json:

s, err := json.marshal(screens)
if err != nil {
    // handle error
}
fmt.println(string(s))

结果:

{"ParentId":0,"ScreenId":2,"Name":"Home","Children":[{"ParentId":3,"ScreenId":4,"Name":"NDR"}]}

Go Playground - https://play.golang.org/p/KgpC7tFJ_hR

终于介绍完啦!小伙伴们,这篇关于《在 Go 中使用 Mysql 创建父子嵌套 json》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>