使用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
相关产品推荐
相关产品推荐

