JSON response in Golang’s GIN returning as scrambled data

Auyer picture Auyer · Dec 28, 2017 · Viewed 17.4k times · Source

I have array of a struct being created from data I collected from the database.

For simplicity, lets say this is the struct:

type Person struct {
ID        int    `db:"id, json:"id"`
}

type PessoalController struct{}

func (ctrl PessoalController) GetPessoal(c *gin.Context) { 
    q := "select id from rh"

    rows, err := db.GetDB().Query(q)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    var pessoas []Pessoal

    var id
    for rows.Next() {
        err := rows.Scan(&id)
        if err != nil {
            log.Fatal(err)
    }
    pessoas = append(pessoas, Pessoal{ ID: id,})

    JsonPessoal, errr := json.Marshal(pessoas)
    if errr != nil {
        log.Fatal(err)
    }
    c.JSON(200, pessoas)
    if err != nil {
        return
    }

    return
}

When I print it, I do get the JSON I expected. But when I send the response, I get raw-looking data like “W3siWQiQjlyNDYslNpYx...”

Have no idea how to proceed.

Edit : Minimal, Complete, and Verifiable example.

Answer

dave picture dave · Dec 28, 2017

c.JSON is serializing into JSON, so you should be doing:

c.JSON(200, pessoas)