go - 未加载时如何忽略 JSON 输出中的关联字段?
问题描述
在我的 gorm 模型中,我有用户和个人资料:
type User struct {
ID int
Username string
Password string `json:"-"`
Profile Profile
}
type Profile struct {
UserID int
Gender string
Places string
//...And many more fields
}
当我使用以下方法查找个人资料的完整显示时:
db.Preload("Profile").Where("id = ?", 1).First(&user)
c.JSON(200, user)
客户端将收到的 JSON 结果非常好:
{
"ID": 1,
"Username": {
"String": "",
"Valid": false
},
"Profile": {
"UserID": 1,
"Gender": "men",
"Places": "Home and staying home",
// ...And many more
},
}
但是当我只想列出 ID 和 Username 两个字段时,即使我没有 Preload() 或 Related() Profile,它仍然是一个空集:
db.Where("id = ?", 1).First(&user)
c.JSON(200, user)
// Result
{
"ID": 1,
"Username": {
"String": "",
"Valid": false
},
//below is redundant in this situation
"Profile": {
"UserID": 0,
"Gender": "",
"Places": "",
// ...And many more 0 or "" fields
},
}
我的问题是每次未加载 JSON 响应时如何忽略配置文件字段?为了节省一些转账费用
解决方案
如果你想省略它们,你应该使用结构的指针。如果未加载,它将使其为零,并且不会出现在 JSON 中
type User struct {
ID int
Username string
Password string `json:"-"`
Profile *Profile `json:",omitempty"`
}
推荐阅读
- swift - 如何在 iOS 应用上使用 swift 向我的 arduino 发送命令?
- php - preg_replace 没有从字符串中删除所有空白字符
- postgresql - 如何通过更新操作本身从触发器“更新前”维护postgreSQL锁
- javascript - CSS单选按钮组按钮中的额外像素不会消失
- c# - 位串的枚举列表
- asp.net-mvc - 如何删除多个电子邮件的文本框上的客户端验证?
- botframework - 使用带有 JSON 数据的 POST 的 Bot 框架直线
- java - 这些并发请求会导致restful服务失败吗?
- sql-server - 存储过程成功创建,但不执行任何操作
- c# - 同时传递参数和挂载卷?