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

使用json.Marshal序列化时如何将嵌套结构体名称转为小写?

解决Go嵌套结构体JSON响应键名小写的问题

这个问题在Go的JSON序列化场景里很常见——encoding/json包只认首字母大写的导出字段,但我们完全不用修改字段本身的大小写,只需要给外层的嵌套结构体字段加上json标签就能指定序列化后的键名。

修改后的结构体定义

就像你给内层字段设置json标签那样,给外层的Config和Database字段也加上对应标签即可:

type status struct {
    Config struct {
        Allow   bool  `json:"allow"`
        Expired bool  `json:"expired"`
    } `json:"config"` // 指定JSON键名为小写的config
    Database struct {
        Healthy   bool  `json:"healthy"`
        WaitCount int64 `json:"wait_count"`
    } `json:"database"` // 指定JSON键名为小写的database
}

修改后的JSON响应

这样处理后,接口返回的payload就会变成你想要的格式:

{
    "config": {
        "allow": false,
        "expired": false
    },
    "database": {
        "healthy": true,
        "wait_count": 1
    }
}

原理说明

  • Go的encoding/json序列化时,会优先使用字段上的json标签指定的键名,只有当字段没有标签时,才会默认使用字段本身的名称。
  • 保持字段首字母大写(Config、Database)是为了让它们成为导出字段,确保encoding/json包能访问到这些字段;而json:"config"这类标签则是告诉序列化器,把这个字段映射为小写的键名输出。

这种方式适用于所有需要自定义JSON键名的导出字段,不管是不是嵌套结构体,都能灵活控制序列化后的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:59:12