Kinozol
@Kinozol
Тёплый LAMPовый вебдев :)

Как учитывать теги структуры при выдаче JSON в gin-gonic?

Изучаю Go, для начала реализую API на основе пакета Gin.
Всё идёт неплохо, но лезут всякие мелочи, которые с ходу не даются.

Имеем структуру:
type User struct {
	Id          int    `json: "id"`
	Username    string `json: "user_name"`
	Displayname string `json: "display_name"`
}


и обработчик HTTP-запроса вида:
router.GET("/mentor/:id", func(c *gin.Context) {
		var (
			user   User
			result gin.H
		)
		id := c.Param("id")
		db, _ := c.MustGet("databaseConn").(*sql.DB)
		row := db.QueryRow("select user_id, username, displayname from engine4_users where mentor=1 AND user_id = ?;", id)
		err := row.Scan(&user.Id, &user.Username, &user.Displayname)
		if err != nil {
			result = gin.H{"result": nil, "count": 0}
		} else {
			result = gin.H{"result": user, "count": 1}
		}
		c.JSON(http.StatusOK, result)
	})


В итоге получаем JSON:
{"count":1,"result":{"Id":3,"Username":"andrey","Displayname":"Андрей (admin)"}}


Вопрос - как сделать, чтобы использовались теги структуры и JSON генерировался по ним, то есть строчными буквами:
{"count":1,"result":{"id":3,"user_name":"andrey","display_name":"Андрей (admin)"}}


Для net/http такое реализуется с помощью json.Marshal, а для Gin не могу понять.
  • Вопрос задан
  • 454 просмотра
Решения вопроса 1
@FireGM
Для этого достаточно убрать пробел в в `json: "id"`. Должно быть `json:"id"`
P.s. И для net/http ваш пример так же не работал бы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы