JSON Tag 的简单应用 - 自定义字段名,去掉空值字段
默认情况下,结构体序列化后的字段名和结构体的字段名保持一致,如在结构体中定义了对外公开的字段,字段名首字母都是大写的,JSON 序列化后得到的也是首字母大写的字段名,并不符合日常开发习惯。
其实 go 提供了在结构体中使用 JSON Tag 定制序列化输出的功能,本文仅使用了“自定义字段名”和“忽略空值字段”两个功能,详见 go 标准库 encoding/json 文档。
现在利用 JSON Tag 来改造上面两个结构体,这里要做的只有两步:
- 把字段名全部改为小写;
- 对 CustomUser 中的 Profile 设置 omitempty 标签,即当 Profile 的值为 nil 时,不输出 Profile 字段;
代码如下:
// 自定义用户输出结构
type CustomUser struct {
ID uint `json:"id"`
Username string `json:"username"`
Role string `json:"role"`
Profile *CustomProfile `json:"profile,omitempty"`
}
// 自定义用户信息输出结构
type CustomProfile struct {
Nickname string `json:"nickname"`
Phone string `json:"phone"`
}