设置 omitempty 标签忽略空值字段

JSON Tag 的简单应用 - 自定义字段名,去掉空值字段

默认情况下,结构体序列化后的字段名和结构体的字段名保持一致,如在结构体中定义了对外公开的字段,字段名首字母都是大写的,JSON 序列化后得到的也是首字母大写的字段名,并不符合日常开发习惯。

其实 go 提供了在结构体中使用 JSON Tag 定制序列化输出的功能,本文仅使用了“自定义字段名”和“忽略空值字段”两个功能,详见 go 标准库 encoding/json 文档

现在利用 JSON Tag 来改造上面两个结构体,这里要做的只有两步:

  1. 把字段名全部改为小写;
  2. 对 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"`
}
posted @ 2021-06-07 18:42  winyh  阅读(182)  评论(0编辑  收藏  举报