go - 有没有一种简单的方法可以在 Golang 中将数据库行转换为 JSON

标签 go

目前我所看到的是,将数据库行转换为 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)

您可以使用社区编写的工具来减轻开销:

  • 围绕数据库/sql 的简约包装器,sqlx , 在内部使用与反射类似的方式。

  • 如果您需要更多功能,请尝试使用“orm”:gorp , gorm .

如果您有兴趣深入了解,请查看:

  • 在 sqlx 包中使用反射,sqlx.go第560行
  • database/sql包中的数据类型转换,convert.go第86行

关于go - 有没有一种简单的方法可以在 Golang 中将数据库行转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685036/

相关文章:

go - 如何使 VScode Go 在多模块 Repo 中工作

go - 如何在进行交叉编译时切换/选择要使用的代码

go - 为什么 golang 中的网络 IO 线程使用量会增加?

go - 3 秒后关闭 SSH session

go - 如何找到函数类型的实现?

regex - 去测试正则表达式类型或语法

go - 如何将嵌套模块路径中的某些内容带入当前范围?

google-app-engine - 来自 Intuit IPP 的请求 token 请求被拒绝

Go build 不构建自定义库

regex - 用于密码检查的 PHP 正则表达式模式在 Go 中不起作用