json go encoding

Impresión de Json vacío como resultado



go encoding (1)

El paquete de encoding/json utiliza la reflexión (paquete de reflect ) para acceder a los campos de estructuras. Debe exportar los campos de su estructura para que funcione (comience con una letra mayúscula):

type Book struct { Isbn string Title string Author string Price float32 }

Y al escanear:

err := rows.Scan(&bk.Isbn, &bk.Title, &bk.Author, &bk.Price)

Citando de json.Marshal() :

Los valores de estructura se codifican como objetos JSON. Cada campo de estructura exportado se convierte en un miembro del objeto ...

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de recuperar algunos datos de mi postgres db e imprimirlos en localhost/db como json. Estoy logrando imprimirlos sin json pero los necesito en 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)) }

Esto es lo que obtengo cuando accedo a localhost: 1337 / db

Y esta es la salida en la terminal:

[{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}]

Alguien sabe cuál es el problema?