【问题解决】go-gin使用c.JSON()返回JSON为空

问题描述

今天使用c.JSON(), 返回前fmt.Println()可以正常输出, 但是c.JSON()一直返回为空.

代码示例

type Msg struct{
	name    string `json:"user"`
	message string
	number  int
}

r.GET("/moreJSON", func(c *gin.Context) {
        // 直接使用结构体定义
        var msg Msg
        msg.name = "Lena"
        msg.message = "hey"
        msg.number = 123
        fmt.Println(msg) // 正常输出msg内容
        c.JSON(http.StatusOK, msg)// 会输出  {} 为空
    })

问题解决与原因

Msg结构体中成员变量需要大写字母开头, 不然小写字母默认为私有变量, 在包内输出时正常, 但是c.JSON()调用JSON/marshal()进行序列化, 属于包外方法, 无法解析到小写字母开头的成员变量.
改成这样就正常了.

type Msg struct{
	Name    string `json:"user"`
	Message string
	Number  int
}
r.GET("/moreJSON", func(c *gin.Context) {
        msg.Name = "Lena"
        msg.Message = "hey"
        msg.Number = 123
        // 会输出  {"user": "Lena", "Message": "hey", "Number": 123}
        c.JSON(http.StatusOK, msg)
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值