Go Gin конвертирует ответ json в base64
Я пытаюсь отправить данные запроса к базе данных в виде ответа json. Вот мой контроллер:
import (
"fmt"
"github.com/json-iterator/go"
"log"
)
func GetNewsPapers() []byte{
db := GetDB()
var json = jsoniter.ConfigCompatibleWithStandardLibrary
rows, err := db.Queryx(`SELECT title, language, ranking, slug, search_term, logo_url FROM public.news_newspaper`)
if err != nil {
log.Println(err)
}
defer rows.Close()
tableData := make([]map[string]interface{}, 0)
for rows.Next() {
entry := make(map[string]interface{})
err := rows.MapScan(entry)
if err != nil {
log.Println(err)
}
tableData = append(tableData, entry)
}
jsonData, _ := json.Marshal(tableData)
fmt.Println(string(jsonData)) // printing expected json
err = rows.Err()
if err != nil {
panic(err)
}
return jsonData
}
а также
func (n *NewsPaperController) GetList(c *gin.Context) {
value := database.GetNewsPapers()
c.JSON(http.StatusOK, value)
}
Проблема в том, что я получаю строку base64 как ответ, а не ожидаемый объект json. Если я конвертируюvalue
для строки, как показано ниже, я получаю удобочитаемые значения.
c.JSON(http.StatusOK, string(value))
Но весь ответ закодирован в такой строке:
"[{\"language\":\"en\",\"logo_url\":\"..\",\"ranking\":2,\"search_term\":\"..\",\"slug\":\"..\",\"title\":\"....\"}]
Как мне получить ответ json, как показано ниже:
[{"language":"en","logo_url":"..","ranking":2,"search_term":"..","slug":"..","title":".."} ]
1 ответ
Решение
func (c *Context) JSON(код int, интерфейс obj {})
JSON сериализует данную структуру как JSON в тело ответа. Он также устанавливает Content-Type как "application/json".
c.JSON()
сериализовать как JSON, вам не нужно демаршалировать его перед использованием. ИспользоватьtableData
в c.JSON()
func GetNewsPapers() []map[string]interface{}{
// your existing code
return tableData
}
func (n *NewsPaperController) GetList(c *gin.Context) {
value := database.GetNewsPapers()
c.JSON(http.StatusOK, value)
}
И используя %#v
вы можете увидеть представление значения в синтаксисе Go, где вы также найдете escape-символ
fmt.Printf("%#v", string(jsonData))