【发布时间】:2017-05-23 22:33:42
【问题描述】:
我有一个带有密码字段的用户结构。当我通过 POSTed JSON 创建用户(或使用新密码更新)时,我想将密码字段接受/解组到我的对象中,但是每当我 return 一个用户时,我想省略密码字段。以下是迄今为止我能想到的最好的。它有效,但它需要在我想消除的字段名称周围很多重复(现在,如果我添加一个像FirstName 这样的新字段,我必须在 3不同的地方)。
如何更好地做到这一点同时仍然尊重结构上的json 标签?
func main() {
origJson := []byte(`{"id":"1","username":"Chad","pwd":"sillypants"}`)
fmt.Println("Original: " + string(origJson))
var unmarshalled User
json.Unmarshal(origJson, &unmarshalled)
fmt.Printf("Unmarshalled: %+v\n", unmarshalled)
marshalled, _ := json.Marshal(unmarshalled)
fmt.Println("ReMarshalled: " + string(marshalled))
}
type User struct {
Id string `json:"id"`
Username string `json:"username"`
Password string `json:"pwd"`
}
type SafeUser struct {
Id string `json:"id"`
Username string `json:"username"`
}
func (u User) MarshalJSON() ([]byte, error) {
safeUser := SafeUser{
Id : u.Id,
Username: u.Username,
}
return json.Marshal(safeUser)
}
Try it 在 Go 游乐场
【问题讨论】:
标签: json go marshalling unmarshalling