
在 Beego 中调用 ServeJSON() 返回 JSON 响应时,可通过 Go 原生结构体标签 json:"-" 忽略特定字段,无需额外配置或中间层处理,简洁高效。
在 beego 中调用 `servejson()` 返回 json 响应时,可通过 go 原生结构体标签 `json:"-"` 忽略特定字段,无需额外配置或中间层处理,简洁高效。
Beego 的 ServeJSON() 方法底层直接调用 Go 标准库的 json.Marshal(),因此完全兼容 Go 的 JSON 标签规则。若需在 API 响应中排除某些字段(如敏感信息、内部状态或数据库元数据),只需在结构体字段上添加 json:"-" 标签即可。
例如:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Password string `json:"-"` // 此字段不会出现在 JSON 输出中
CreatedAt time.Time `json:"created_at"`
IsDeleted bool `json:"-"` // 同样被忽略
}
在控制器中使用:
func (c *UserController) Get() {
user := User{
ID: 1,
Name: "Alice",
Password: "secret123", // 不会序列化到响应中
CreatedAt: time.Now(),
IsDeleted: true,
}
c.Data["json"] = user
c.ServeJSON() // 输出:{"id":1,"name":"Alice","created_at":"2024-06-15T10:30:00Z"}
}
⚠️ 注意事项:
-
json:"-"是 Go 标准行为,与 Beego ORM 的-标签(如orm:"-")语义不同:前者影响 JSON 序列化,后者影响数据库映射,二者可共存且互不干扰; - 若字段需在 ORM 中忽略但 JSON 中保留,应分别使用
orm:"-"和json:"field_name";反之亦然; - 空字符串、零值字段默认仍会输出(除非配合
omitempty),如需同时省略零值与空值,可组合使用:json:"name,omitempty"; - Beego v2+ 版本仍完全兼容该机制,无需升级或额外适配。
综上,json:"-" 是最轻量、最标准、最推荐的字段屏蔽方式,适用于所有基于 json.Marshal() 的场景,包括 Beego 的 ServeJSON、JSONP 及自定义 JSON 响应逻辑。











