结果打印空的Json

我试图从我的postgres数据库中检索一些数据,并将它们打印localhost/db为json。我成功地在没有json的情况下打印了它们,但我在json中需要它们。

main.go:

package main

import (

"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

回到顶部