我是Go的新手,所以希望这很容易解决。我想从SQL数据库中的行构建JSON值。它不一定是SQL,但我正在寻找一种方法来生成结构列表或一个容器,它包含许多值以便从中生成JSON。
例如,对" / post"的HTTP GET请求会回来:
{
"posts": [
{ "title": "First title", "created_by": "User1" },
{ "title": "My second post", "created_by": "User1"}
]
}
我不知道这样做的正确方法是什么。我已经尝试过使用指针数组的其他方法,但它没有正确出来。到目前为止,它打印出每个结构的正确值,但结果Marshal为空[{},{},{}]
请放轻松我:)
example.go
package main
import (
"fmt"
"encoding/json"
"time"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
type Post struct {
name string `json:"name"`
created_by string `json:"created_by"`
created_at time.Time `json:"created_at"`
}
type Posts []Post
func main() {
db, err := sql.Open("mysql", "root:1234@/blog?parseTime=true")
if err != nil { panic(err.Error()) }
defer db.Close()
err = db.Ping()
if err != nil { panic(err.Error()) }
rows, err := db.Query("select title, created_by, created_at from post")
if err != nil { panic(err.Error()) }
defer rows.Close()
var posts Posts
for rows.Next() {
var post Post
err := rows.Scan(&post.name, &post.created_by, &post.created_at)
if err != nil { panic(err.Error()) }
fmt.Printf("name=%s, created_by=%s, created_at=%s\n", post.name, post.created_by, post.created_at)
posts = append(posts, post)
}
data, err := json.Marshal(posts)
if err != nil { panic(err.Error()) }
fmt.Printf("%s\n", data)
}