未加载时如何忽略 JSON 输出中的关联字段?
How to ignore an association field in JSON output when it is not loaded?
在我的 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 响应的配置文件字段?为了节省一些转账费用
如果你想省略它们,你应该使用结构体的指针。不加载就会变成nil,不会出现在JSON
type User struct {
ID int
Username string
Password string `json:"-"`
Profile *Profile `json:",omitempty"`
}
在我的 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 响应的配置文件字段?为了节省一些转账费用
如果你想省略它们,你应该使用结构体的指针。不加载就会变成nil,不会出现在JSON
type User struct {
ID int
Username string
Password string `json:"-"`
Profile *Profile `json:",omitempty"`
}