Reputation: 4329
I understand how to return JSON using the gorilla/mux go package but i want to be able to print JSON also in development without having to wrap it to route endpoint
I have the following code and want to list users from postgresql database
package main
import (
"encoding/json"
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
var DB *gorm.DB
var err error
const DNS = "host=localhost user=postgres_user password=postgres_password dbname=postgres_db port=5432 sslmode=disable"
type User struct {
gorm.Model
FirstName string `json:"firstname"`
LastName string `json:"lastname"`
Email string `json:"email"`
}
func PostgresTest() {
DB, err = gorm.Open(postgres.Open(DNS), &gorm.Config{})
if err != nil {
fmt.Println(err.Error())
panic("Cannot connect to DB")
}
var users []User
DB.Limit(2).Find(&users)
// json.NewEncoder(w).Encode(users)
fmt.Println(json.Marshal(users))
}
func main() {
PostgresTest()
}
here is what am expecting
[
{
"ID": 1,
"CreatedAt": "2021-09-06T14:18:47.766414-05:00",
"UpdatedAt": "2021-09-06T14:18:47.766414-05:00",
"DeletedAt": null,
"firstname": "first1",
"lastname": "last1",
"email": "[email protected]"
},
{
"ID": 2,
"CreatedAt": "2021-09-06T14:18:58.144181-05:00",
"UpdatedAt": "2021-09-06T14:18:58.144181-05:00",
"DeletedAt": null,
"firstname": "first2",
"lastname": "last2",
"email": "[email protected]"
}
]
but here is what am getting
[91 123 34 73 68 34 58 49 44 34 67 114 101 97 116 101 100 65 116 34 58 34 50 48 50 49 45 48 57 45 48 54 84 48 55 58 50 49 58 49 51 46 53 52 50 54 55 50 45 48 53 58 48 48 34 44 34 85 112 100 97 116 101 100 65 116 34 58 34 50 48 50 49 45 48 57 45 48 54 84 48 55 58 50 49 58 49 51 46 53 52 50 54 55 50 45 48 53 58 48 48 34 44 34 68 101 108 101 116 101 100 65 116 34 58 110 117 108 108 44 34 102 105 114 115 116 110 97 109 101 34 58 34 98 97 98 97 116 117 110 100 101 34 44 34 108 97 115 116 110 97 109 101 34 58 34 98 117 115 97 114 105 34 44 34 101 109 97 105 108 34 58 34 98 98 117 115 97 114 105 64 101 109 97 105 108 46 99 111 109 34 125 93] <nil>
What do i do to be able to print JSON or list of JSON?
Upvotes: 0
Views: 1036
Reputation: 656
json.Marshal
function returns []byte
thus what you see in the output is a decimal representation of each byte from your JSON result. You must convert []byte
returned by json.Marshal
to string either directly like this
jsonUsers, err := json.Marshal(users)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonUsers))
or by using formatter
jsonUsers, err := json.Marshal(users)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", jsonUsers)
I also advise you to read encoding/json
package documentation when you can find how to pretty format JSON.
Upvotes: 2
Reputation: 484
use string(jsonbytecode)
type B struct {
C int
D int
}
func main() {
b := B{C: 4, D: 5}
js, _ := json.Marshal(b)
fmt.Println(js)
fmt.Println(string(js))
}
Here is the output, the string(js)
converts to JSON
[123 34 67 34 58 52 44 34 68 34 58 53 125]
{"C":4,"D":5}
Upvotes: 0