在Go中整合了一个MySQL到JSON的快速转储工具。但是,我发现我从数据库检索的所有内容都是一个[]byte
数组。因此,我将所有内容编码为字符串,而不是本机JSON整数或布尔值。
代码子集:
import (
"encoding/json"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func dumpTable(w io.Writer, table) {
// ...
rows, err := Query(db, fmt.Sprintf("SELECT * FROM %s", table))
checkError(err)
columns, err := rows.Columns()
checkError(err)
scanArgs := make([]interface{}, len(columns))
values := make([]interface{}, len(columns))
for i := range values {
scanArgs[i] = &values[i]
}
for rows.Next() {
err = rows.Scan(scanArgs...)
checkError(err)
record := make(map[string]interface{})
for i, col := range values {
if col != nil {
fmt.Printf("\n%s: type= %s\n", columns[i], reflect.TypeOf(col))
switch t := col.(type) {
default:
fmt.Printf("Unexpected type %T\n", t)
case bool:
fmt.Printf("bool\n")
record[columns[i]] = col.(bool)
case int:
fmt.Printf("int\n")
record[columns[i]] = col.(int)
case int64:
fmt.Printf("int64\n")
record[columns[i]] = col.(int64)
case float64:
fmt.Printf("float64\n")
record[columns[i]] = col.(float64)
case string:
fmt.Printf("string\n")
record[columns[i]] = col.(string)
case []byte: // -- all cases go HERE!
fmt.Printf("[]byte\n")
record[columns[i]] = string(col.([]byte))
case time.Time:
// record[columns[i]] = col.(string)
}
}
}
s, _ := json.Marshal(record)
w.Write(s)
io.WriteString(w, "\n")
}
}
我还需要将数据库表转储到json,这是我实现的方式:(与本主题中的另一个答案不同,所有内容都不是字符串,这要归功于这个答案:我可以正确获取整数字段)
func getJSON(sqlString string) (string, error) {
rows, err := db.Query(sqlString)
if err != nil {
return "", err
}
defer rows.Close()
columns, err := rows.Columns()
if err != nil {
return "", err
}
count := len(columns)
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)
}
jsonData, err := json.Marshal(tableData)
if err != nil {
return "", err
}
fmt.Println(string(jsonData))
return string(jsonData), nil
}
这是一个示例输出:
[{"ID":0,"Text":"Zero"},{"ID":1,"Text":"One"},{"ID":2,"Text":"Two"}]
问题内容: 无法将image.image转换为[] byte。问题点用虚线包裹。 基本上,我需要new_image为[] byte格式,以便可以将其发送到我的S3存储桶。 谢谢您的帮助。 问题答案: 您需要一个byte.Buffer,而不是bufio.Writer。bytes.Buffer在需要写入器的写入器时使用。bufio.Writer只是在将数据转发到另一个写入器之前将其缓存在内存中。
问题内容: 我想在下面的代码中改进getCustomerFromDTO方法,我需要从interface {}创建一个结构,目前我需要将该接口编组为byte [],然后将数组解组为我的结构-必须有更好的方法。 我的用例是,我通过rabbitmq发送结构,然后使用具有其他特定于域的数据的通用DTO包装器来发送它们。当我从Rabbit MQ接收DTO时,消息下方的一层将被封送给我的DTO,然后我需要从该
问题内容: 这是我当前的mysql表的样子: 现在,我想返回基于星期几进行分组的结果集,如下所示: 这是我当前的查询。但它只返回每天的第一打。 有人可以帮我弄这个吗?谢谢迈克 问题答案: SQLFiddle演示 输出值
我想使用PHP将大量MySQL数据转换为JSON。我有20K及以上的记录,但我无法将MySQL数据转换为JSON。我想创建RESTAPI,所以需要以JSON格式发送(响应)数据。 我试过这个,但没有得到输出: 代码:
问题内容: 我试图编写一个基本的cron脚本来运行和“转储”一个mysql数据库。由于某种原因,当“成功保存文件”时,它会创建文件,但是它为空。如果执行保存console.log而不是保存文件,它将打印一个空字符串。对我可能做错的事情有任何想法吗? 提前致谢。 问题答案: 编写的代码甚至都没有保存到我的文件中。似乎有一些问题。不知道这是实际的代码还是某些内容丢失在复制粘贴中。但是,根据您所拥有的:
问题内容: 这是我所拥有的信息: 我正在使用MySQL和PHP5在基于Linux的系统上工作。我需要能够从.php文件中生成一个,然后将该转储存储在服务器上我指定的位置的文件中。 因为我是PHP nooblet,所以我希望有人给我一些帮助,指导或代码,这些可以帮助我完成所需的工作。这将必须从Internet远程运行。 问题答案: 您可以使用该 功能执行外部命令。 注意:在和之间,我会选择第二个,它