我面临的情况是,我必须使用用户本身给出的键和值对在数据库中存储动态值。
用户给出键和值,我将其解释为
{"key": "用户给定", "value": "用户给定"}
我将所有这些内容添加到一个数组中,并且我希望将该数组读入 Go 代码,其中从数据库表中读取对象数组。
最佳答案
您可以使用 JSON Unmarshaler 接口(interface),但根据您从 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)
}
}
关于mysql - 在Golang中从MySql读取Json数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51394852/