Golang是一種快速并發(fā)編程語言,對(duì)于json的處理也非常方便。但在一些情況下,我們希望隱藏一些敏感字段,以保證數(shù)據(jù)安全。下面介紹如何在Golang中隱藏json中的某個(gè)字段。
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Password string `json:"-"`
Email string `json:"email"`
}
func (u User) MarshalJSON() ([]byte, error) {
type Alias User
return json.Marshal(&struct {
Password string `json:"-"`
*Alias
}{
Alias: (*Alias)(&u),
Password: "",
})
}
可以看到,在User結(jié)構(gòu)體中Password字段有一個(gè)"-"。這個(gè)"-"表示在json編碼和解碼時(shí)不會(huì)出現(xiàn)此字段。如果要在json中隱藏多個(gè)字段,只需在結(jié)構(gòu)體中都添加上這樣的"-"即可。
然后,我們需要在結(jié)構(gòu)體中實(shí)現(xiàn)MarshalJSON()方法,并在其中隱藏Password字段。在這個(gè)方法中,我們定義了一個(gè)別名Alias,然后將原有的User對(duì)象轉(zhuǎn)化為Alias對(duì)象。最后將Password字段置為空字符串,再對(duì)轉(zhuǎn)換后的Alias對(duì)象進(jìn)行json.Marshal操作。
實(shí)際應(yīng)用中,我們可以根據(jù)需要隱藏多個(gè)字段,只需在Alias中添加相應(yīng)的"-"即可。