Go語言是現(xiàn)代化的高級編程語言,在處理數(shù)據(jù)的時候,用JSON是一種非常流行的做法。而在Go語言中,我們可以通過列化和反序列化的方式來處理JSON數(shù)據(jù),與此相關(guān)的有以下幾個函數(shù)。
func Marshal(v interface{}) ([]byte, error) func Unmarshal(data []byte, v interface{}) error func NewDecoder(r io.Reader) *Decoder func NewEncoder(w io.Writer) *Encoder
其中,func Marshal(v interface{})函數(shù)是將Go語言中的數(shù)據(jù)類型轉(zhuǎn)換成JSON格式;func Unmarshal(data []byte, v interface{})函數(shù)就是將JSON格式的數(shù)據(jù)轉(zhuǎn)換成Go語言中的數(shù)據(jù)類型。
比如我們有以下的Go語言結(jié)構(gòu)體:
type Person struct { Name string `json:"name"` Age int `json:"age"` Sex string `json:"sex"` }
那么我們就可以通過Marshal()函數(shù)來將對象轉(zhuǎn)換為JSON數(shù)據(jù):
person := Person{"Tom", 18, "male"} json, err := json.Marshal(person) if err != nil { fmt.Println("JSON Marshal error!") return } fmt.Println(string(json))
輸出結(jié)果為:
{"name":"Tom","age":18,"sex":"male"}
同樣,我們也可以通過Unmarshal()函數(shù)將JSON數(shù)據(jù)轉(zhuǎn)換為Go語言對象:
data := []byte(`{"name":"Tom","age":18,"sex":"male"}`) var person Person err := json.Unmarshal(data, &person) if err != nil { fmt.Println("JSON Unmarshal error!") return } fmt.Println(person)
輸出結(jié)果為:
{Tom 18 male}
除了使用Marshall() 和 Unmarshall()函數(shù),我們還可以使用NewEncoder() 和 NewDecoder()函數(shù)對JSON流進行讀寫操作。這種方式適合于需要將JSON數(shù)據(jù)流轉(zhuǎn)換成Go語言對象的場景。
總結(jié)一下,Go語言提供了豐富的JSON序列化和反序列化的方法,可以輕松地完成JSON數(shù)據(jù)和Go語言對象之間的互相轉(zhuǎn)換。