You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言Gin-Gonic框架使用c.JSON返回合法嵌套JSON数据问题

问题原因

c.JSON()方法的核心能力是自动将传入的Go变量序列化为标准JSON格式。你直接传入JSON格式字符串时,Gin会将该字符串判定为普通字符串类型值,会自动给字符串外层加双引号、转义内部的换行符和双引号,最终返回的就是你看到的不符合预期的结果。


解决方案1:直接解析已有的JSON字符串后返回

如果你的JSON结构是固定写死的、不想额外定义结构体,可以先把写好的JSON字符串反序列化为Go的切片/映射类型,再传给c.JSON()即可:

import "encoding/json"

r.GET("/api/auth", func(c *gin.Context) {
    // 注意:原JSON字符串最后一个字段末尾的多余逗号需要删除,否则反序列化会报错
    jsonStr := `[{
        "date":         "gAAAAABgupdG-1IDgOD1uqauANLdt4KC8yHazbPt5g==",
        "hwid":         "GyFfDNpk56WcKOCAgKqIr8ELI0nAhe2ZgjEdLr5UHblBXeS-5pl2YIunZHwrbQoZv6gtD-ORLAwSQu7futgRTZUr5sNXnkjGurT60EJGRHn_S",
        "hwid_resets":  "TljjFnU_QkmYgQw9bfqHlFXSw1uQPsznwSylQ8_awHoxOKoYaCEFPg==",
        "id":           "gAAAAABgupdGg6POUjVAUMazxKmsIB2D-gu5zRZWK2eaqJk-OMohG-JQL00hAD2SpEB-mnJYJChBGPQ==",
        "key":          "gAAAAABgupdGq_HbYNJWkl7btrZUrxdO3wlwS8_KWUh69EXwxmTiSsB_GynUVcxpbOOKSQmfR_FoRmgfwz6-LI3yp7D-VIY-X6B7DSl0nAK2s",
        "notes":        "gAAAAABgupdGSSMNcQXVFzyIbT8mdRan204BDkNLH-jCaVMMMQxbGBx0jej3_2hjSFpagBa5BNU1WqsIR1og-A==",
        "total_logins": "gAAAAABgupdGEF_9XEIbHefOuNuvxypTh9orUKS0qC8Kbvql7xJw1wn8aT0wVGsFxVllJBFw=="
    }]`

    var jsonData []any
    err := json.Unmarshal([]byte(jsonStr), &jsonData)
    if err != nil {
        c.JSON(500, gin.H{"error": "数据解析失败"})
        return
    }
    c.JSON(200, jsonData)
})

解决方案2:定义结构体(生产环境推荐写法)

更推荐定义和JSON字段匹配的结构体,直接传递结构体实例给c.JSON(),代码可读性、可维护性更高,还能利用Go的类型校验能力避免字段错误:

// 定义和JSON字段对应的结构体
type AuthItem struct {
    Date         string `json:"date"`
    Hwid         string `json:"hwid"`
    HwidResets   string `json:"hwid_resets"`
    Id           string `json:"id"`
    Key          string `json:"key"`
    Notes        string `json:"notes"`
    TotalLogins  string `json:"total_logins"`
}

r.GET("/api/auth", func(c *gin.Context) {
    jsonData := []AuthItem{
        {
            Date: "gAAAAABgupdG-1IDgOD1uqauANLdt4KC8yHazbPt5g==",
            Hwid: "GyFfDNpk56WcKOCAgKqIr8ELI0nAhe2ZgjEdLr5UHblBXeS-5pl2YIunZHwrbQoZv6gtD-ORLAwSQu7futgRTZUr5sNXnkjGurT60EJGRHn_S",
            HwidResets: "TljjFnU_QkmYgQw9bfqHlFXSw1uQPsznwSylQ8_awHoxOKoYaCEFPg==",
            Id: "gAAAAABgupdGg6POUjVAUMazxKmsIB2D-gu5zRZWK2eaqJk-OMohG-JQL00hAD2SpEB-mnJYJChBGPQ==",
            Key: "gAAAAABgupdGq_HbYNJWkl7btrZUrxdO3wlwS8_KWUh69EXwxmTiSsB_GynUVcxpbOOKSQmfR_FoRmgfwz6-LI3yp7D-VIY-X6B7DSl0nAK2s",
            Notes: "gAAAAABgupdGSSMNcQXVFzyIbT8mdRan204BDkNLH-jCaVMMMQxbGBx0jej3_2hjSFpagBa5BNU1WqsIR1og-A==",
            TotalLogins: "gAAAAABgupdGEF_9XEIbHefOuNuvxypTh9orUKS0qC8Kbvql7xJw1wn8aT0wVGsFxVllJBFw==",
        },
    }
    c.JSON(200, jsonData)
})

内容的提问来源于stack exchange,提问作者Parallax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 19:36:03