目前我所看到的是,将数据库行转换为 JSON 或 []map[string]interface{}
并不简单。我必须创建两个 slice ,然后循环遍历列并每次都创建键。
...一些代码
tableData := make([]map[string]interface{}, 0)
values := make([]interface{}, count)
valuePtrs := make([]interface{}, count)
for rows.Next() {
for i := 0; i < count; i++ {
valuePtrs[i] = &values[i]
}
rows.Scan(valuePtrs...)
entry := make(map[string]interface{})
for i, col := range columns {
var v interface{}
val := values[i]
b, ok := val.([]byte)
if ok {
v = string(b)
} else {
v = val
}
entry[col] = v
}
tableData = append(tableData, entry)
}
有这个包吗?或者我在这里缺少一些基础知识
最佳答案
我正在处理同样的问题,就我的调查而言,看起来没有其他办法。
我见过的所有包都使用基本相同的方法
一些你应该知道的事情,希望能节省你的时间:
- database/sql包将所有数据转换为合适的类型
- 如果你正在使用 mysql 驱动程序(go-sql-driver/mysql) 你需要添加 参数到您的数据库字符串,以使其返回类型时间而不是字符串 (使用 ?parseTime=true,默认为 false)
您可以使用社区编写的工具来减轻开销:
如果您有兴趣深入了解,请查看:
- 在 sqlx 包中使用反射,sqlx.go第560行
- database/sql包中的数据类型转换,convert.go第86行
关于go - 有没有一种简单的方法可以在 Golang 中将数据库行转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685036/