为了账号安全,请及时绑定邮箱和手机立即绑定

GORM 省略 JSON 响应中的字段

GORM 省略 JSON 响应中的字段

Go
三国纷争 2023-01-03 14:11:26
我想在我的 JSON 响应中省略一些字段。目前我有一个返回新结构的类型接收器userToJson。然后我将其传递给json.NewEncoder(). 但是我想知道这是否是使用 GORM 省略字段的最佳方式。预先谢谢你!package serverimport (    "gorm.io/gorm")type User struct {    gorm.Model    FirstName string `gorm:"not null;default:null"`    LastName  string `gorm:"not null;default:null"`    Email     string `gorm:"not null;default:null;unique"`    Password  string `gorm:"not null;default:null"`    Posts     []Posts}type userToJson struct {    Email string    Posts []Posts}func (u *User) toJson() userToJson {    return userToJson{        Email: u.Email,        Posts: u.Posts,    }}
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

另一种方法是Marshaler为您的类型实现接口,以修改编组到 JSON 的工作方式。该json包在编组之前检查该接口,如果存在,则调用该函数。这是标准库中的接口。


type Marshaler interface {

    MarshalJSON() ([]byte, error)

}

您的类型的一个示例实现User如下。


func (u *User) MarshalJSON() ([]byte, error) {

    type Temp struct {

        Email string

        Posts []Post

    }


    t := Temp{

        Email: u.Email,

        Posts: u.Posts,

    }

    return json.Marshal(&t)

}


查看完整回答
反对 回复 2023-01-03
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

你应该用所有字段的 json 标记声明你的结构,Behrooz 在评论中建议的应该可以正常工作


type User struct {

    gorm.Model

    FirstName string `json:"-" gorm:"not null;default:null"`

    LastName  string `json:"-" gorm:"not null;default:null"`

    Email     string `json:"email" gorm:"not null;default:null;unique"`

    Password  string `json:"-" gorm:"not null;default:null"`

    Posts     []Posts`json:"posts"`

}


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信