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

Kib*_*iba 8 go

目前我已经看到的是,将数据库行转换为JSON或者[]map[string]interface{}并不简单.我必须创建两个切片,然后遍历列并每次创建密钥.

......一些代码

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)
  }
Run Code Online (Sandbox Code Playgroud)

这有什么包裹吗?或者我在这里遗漏了一些基础知识

Edd*_*y K 7

我正在处理同样的问题,就我的调查而言,看起来没有别的办法.

我见过的所有软件包使用的方法基本相同

你应该知道几件事,希望能节省你的时间:

  • database/sql包将所有数据转换为适当的类型
  • 如果您使用的是mysql驱动程序(go-sql-driver/mysql),则需要将params添加到db字符串中,以便返回类型时间而不是字符串(使用?parseTime = true,默认为false)

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

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

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

如果您对潜水更感兴趣,请查看:

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