登录
首页 >  Golang >  Go问答

使用Golang从MySql中提取Json数据

来源:stackoverflow

时间:2024-03-19 22:09:31 287浏览 收藏

在需要存储用户提供键值对的动态数据时,可以通过将这些键值对解释为 JSON 对象,并将其存储在数组中。随后,使用 Go 代码读取数组,将 JSON 对象转换为 Go 结构,从而从 MySQL 数据库中提取 JSON 数据。

问题内容

我面临的情况是,我必须使用用户本身给出的键和值对在数据库中存储动态值。

用户给出键和值,我将其解释为

{"key": "用户给定", "value": "用户给定"}

我将所有这些内容添加到一个数组中,并且我希望将该数组读入 Go 代码,其中对象数组是从数据库表中读取的。


解决方案


您可以使用 json unmarshaler 接口,但根据您从 mysql 检索数据的方式,您的实现会有所不同。但想法是一样的。在本例中,我使用 https://github.com/go-sql-driver/mysql 并假设您希望将数据存储在实际的 json 字段中(mysql >= 5.7),您可以执行以下操作:

type MyField struct {
    Key string `json:"key"`
    Value string `json:"value"`
}

type MyModel struct {
    ID uint64
    MyFieldName MyField `json:"my_field_name"`
}


func (m *MyField) Scan(src interface{}) error {
    // The data stored in a JSON field is actually returned as []uint8
    val := src.([]uint8)
    return json.Unmarshal(val, &m)
}

func main() {
    db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1)/dbname")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    results, err := db.Query("SELECT id, my_field_name FROM my_table")

    if err != nil {
        panic(err.Error())
    }

    for results.Next() {
        var row MyModel
        err := results.Scan(&row.ID, &row.MyFieldName)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(row.MyFieldName.Key)
    }
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《使用Golang从MySql中提取Json数据》文章吧,也可关注golang学习网公众号了解相关技术文章。

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