结果打印空的Json
我试图从我的postgres数据库中检索一些数据,并将它们打印localhost/db为json。我成功地在没有json的情况下打印了它们,但我在json中需要它们。
main.go:
package mainimport (
    "database/sql"
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    _ "github.com/lib/pq"
)
type Book struct {
    isbn   string
    title  string
    author string
    price  float32
}
var b []Book
func main() {
    db, err := sql.Open("postgres", "postgres://****:****@localhost/postgres?sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }
    rows, err := db.Query("SELECT * FROM books")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    var bks []Book
    for rows.Next() {
        bk := new(Book)
        err := rows.Scan(&bk.isbn, &bk.title, &bk.author, &bk.price)
        if err != nil {
            log.Fatal(err)
        }
        bks = append(bks, *bk)
    }
    if err = rows.Err(); err != nil {
        log.Fatal(err)
    }
    b = bks
    http.HandleFunc("/db", getBooksFromDB)
    http.ListenAndServe("localhost:1337", nil)
}
func getBooksFromDB(w http.ResponseWriter, r *http.Request) {
    fmt.Println(b)
    response, err := json.Marshal(b)
    if err != nil {
        panic(err)
    }
    fmt.Fprintf(w, string(response))
}
这是我访问localhost:1337 / db时得到的
这是终端上的输出:
 [{978-1503261969 Emma Jayne Austen 9.44} {978-1505255607 The Time Machine H. G. Wells 5.99} {978-1503379640 The Prince Niccolò Machiavelli 6.99}]有人知道是什么问题吗?
回答:
该encoding/json包使用反射(reflect结构的包),以存取字段。您需要导出结构的字段以使其起作用(以大写字母开头):
type Book struct {    Isbn   string
    Title  string
    Author string
    Price  float32
}
扫描时:
err := rows.Scan(&bk.Isbn, &bk.Title, &bk.Author, &bk.Price)引用自json.Marshal():
结构值编码为JSON对象。每个 成为对象的成员。
以上是 结果打印空的Json 的全部内容, 来源链接: utcz.com/qa/399993.html



