JSON response in Golang’s GIN returning as scrambled data

26,148

Solution 1

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

c.JSON(200, pessoas)

Solution 2

Your codes ans the question itself. Look at it and read my comments in the code.

jsonPessoal, errr := json.Marshal(pessoas)
if errr != nil {
    log.Fatal(err)
}
fmt.Fprintf(os.Stdout, "%s", jsonPessoal) // still fine here .
// it is fine because you are formating []byte into string using fmt and 
// printing it on console. `%s` makes sures that it echos as string. 

c.JSON(200, jsonPessoal ) // jsonPessoal is still a []byte !! 
if err != nil {
    return
}

The correct way to echo json string using gin would be

c.JSON(http.StatusOK, gin.H{ 
            "code" : http.StatusOK, 
            "message": string(jsonPessoal),// cast it to string before showing
})
Share:
26,148
Auyer
Author by

Auyer

Updated on July 09, 2022

Comments

  • Auyer
    Auyer almost 2 years

    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.