一尘不染

编组而不是编组时如何忽略JSON字段

go

假设我在User结构中有一个密码字段。

type User struct{
   UserName string `json:"username"`
   Password string `json:"-"`
}

我的客户通过一起发布用户名和密码来注册用户。因此,如果我将JSON解码为上述struct,它将忽略密码。可以预料的
但是我想知道是否只有编组时才能忽略字段。我检查了官方文档页面,但找不到任何东西。

https://golang.org/pkg/encoding/json/

我可以在结构中添加一个额外的字段,但我首先需要知道是否可以使用JSON lib做到这一点。


阅读 187

收藏
2020-07-02

共1个答案

一尘不染

一种常见的方法是使用结构相同但json标签不同甚至结构不同的临时类型或变量:

type User struct {
    UserName string `json:"username"`
    Password string `json:"password"`
}

func (usr User) MarshalJSON() ([]byte, error) {
    var tmp struct {
        UserName string `json:"username"`
    }
    tmp.UserName = usr.UserName
    return json.Marshal(&tmp)
}
2020-07-02