mysql - 在 Golang 中从 MySql 中读取 Json 数据?
问题描述
我面临这样一种情况,我必须使用用户自己给出的键和值对将动态值存储在数据库中。
用户给出键和值,我将其解释为
{"key": "user Given", "value": "user Given"}
我将所有这些东西添加到一个数组中,我希望这个数组被读入 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)
}
}
推荐阅读
- ios - 使用标签和图像自定义工具栏项目?
- python - 为什么我不能从类外部访问 __init__ 中定义的类变量?
- php - 在列中显示网页时出错
- javascript - 如何在 React Native 中选择 FlatList 项?
- javascript - 我如何能够在 vue js html 中以给定格式进行多项选择和传递数据?
- ruby-on-rails - 如何使用 ruby on rails 将密码添加到现有的 zip 文件
- nativescript - 在 nativescript 中保存图像
- php - PHP CURL 数据从表转换为 CSV
- php - 如何停止在 WordPress 中的搜索结果自定义帖子类型中显示
- amazon-ec2 - zmq.error.ZMQError:无法分配请求的地址