隨著大數(shù)據(jù)時(shí)代的到來(lái),我們對(duì)于數(shù)據(jù)的處理變得越來(lái)越重要。而JSON作為一種輕量級(jí)的數(shù)據(jù)交換格式,越來(lái)越受到大家的喜愛(ài)。
在golang中,我們經(jīng)常需要通過(guò)接口返回JSON數(shù)據(jù),但有時(shí)我們只需要返回其中部分字段。這時(shí)候就需要使用golang過(guò)濾JSON字段。
我們可以使用golang自帶的"encoding/json"包來(lái)進(jìn)行JSON的編解碼。將結(jié)構(gòu)體通過(guò)json序列化后,再通過(guò)字節(jié)數(shù)組進(jìn)行傳遞,并在前端進(jìn)行反序列化。
type User struct { ID int `json:"id"` Name string `json:"name"` Password string `json:"-"` Created_at string `json:"created_at"` } b, err := json.Marshal(User{ ID: 1, Name: "Bob", Password: "123456", Created_at: "2021-01-01 00:00:00", }) if err != nil { log.Fatalln(err) } fmt.Println(string(b))
上面的代碼通過(guò)結(jié)構(gòu)體序列化成JSON字符串,輸出結(jié)果如下:
{"id":1,"name":"Bob","created_at":"2021-01-01 00:00:00"}
但是我們不希望在返回的JSON字符串中包含"password"字段。這時(shí)候我們可以在結(jié)構(gòu)體中通過(guò)"-"標(biāo)記使字段在JSON序列化中被忽略。
或者我們也可以在序列化前,手動(dòng)過(guò)濾掉需要過(guò)濾的字段:
type User struct { ID int `json:"id"` Name string `json:"name"` Password string `json:"-"` Created_at string `json:"created_at"` } user := User{ ID: 1, Name: "Bob", Password: "123456", Created_at: "2021-01-01 00:00:00", } filteredUser := map[string]interface{}{ "id": user.ID, "name": user.Name, "created_at": user.Created_at, } b, err := json.Marshal(filteredUser) if err != nil { log.Fatalln(err) } fmt.Println(string(b))
上面的代碼通過(guò)手動(dòng)構(gòu)建過(guò)濾掉"password"字段的結(jié)構(gòu)體,并進(jìn)行序列化。輸出結(jié)果與之前相同:
{"id":1,"name":"Bob","created_at":"2021-01-01 00:00:00"}
以上就是golang返回JSON過(guò)濾字段的一些簡(jiǎn)單方法,希望能對(duì)大家有所幫助。