结果打印空 Json [英] Printing Empty Json as a result
问题描述
我试图从我的 postgres 数据库中检索一些数据并将它们作为 json 打印到 localhost/db
.我在没有 json 的情况下成功打印它们,但我需要它们在 json 中.
I am trying to retrieve some data from my postgres db and printing them to localhost/db
as json. I am succeeding in printing them without json but I need them in 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))
}
这是终端上的输出:
[{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}]
有人知道这是什么问题吗?
Anyone knows what is the problem?
推荐答案
encoding/json
包使用反射(reflect
包)访问结构的字段.您需要导出结构的字段以使其工作(以大写字母开头):
The encoding/json
package uses reflection (reflect
package) to access fields of structs. You need to export the fields of your struct to make it work (start them with an uppercase letter):
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 对象.每个导出的结构域都成为对象的成员...
Struct values encode as JSON objects. Each exported struct field becomes a member of the object...
这篇关于结果打印空 Json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!