GORM省略JSON响应中的字段



我想省略JSON响应中的一些字段。目前,我有一个类型接收器,返回一个新的结构体userToJson。然后我把它传递给json.NewEncoder()。然而,我想知道这是否是使用GORM省略字段的最佳方式。

事先谢谢你!

package server
import (
"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,
}
}

另一种方法是为您的类型实现接口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)
}

你应该声明你的结构与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"`
}

相关内容

  • 没有找到相关文章

最新更新