Go 語(yǔ)言的結(jié)構(gòu)體 (struct) 是一種集合類型,可用于表示對(duì)象的屬性和方法。在開發(fā)過(guò)程中,我們經(jīng)常需要將結(jié)構(gòu)體轉(zhuǎn)換成 JSON 格式。Go 提供了內(nèi)置的 json 包,能夠方便地進(jìn)行結(jié)構(gòu)體轉(zhuǎn) JSON 操作。
type Student struct { Name string `json:"name"` Age int `json:"age"` Grade int `json:"grade,omitempty"` } // 轉(zhuǎn)換結(jié)構(gòu)體為 JSON func main() { s := Student{ Name: "Tom", Age: 18, Grade: 90, } b, err := json.Marshal(s) if err != nil { log.Fatal(err) } fmt.Println(string(b)) }
上面的代碼創(chuàng)建了一個(gè) Student 結(jié)構(gòu)體,包含 Name、Age 和 Grade 三個(gè)屬性。使用 json.Marshal 函數(shù)將其轉(zhuǎn)換成 JSON 格式,并打印出來(lái)。
JSON 對(duì)象的屬性名可以通過(guò)結(jié)構(gòu)體的字段標(biāo)簽進(jìn)行定義,如上面代碼中的 `json:"name"`,其中冒號(hào)后面的字符串就是 JSON 格式下的屬性名。如果一個(gè)屬性在結(jié)構(gòu)體中對(duì)應(yīng)的值為空(nil)且被標(biāo)記為 omitempty ,則該屬性不會(huì)出現(xiàn)在 JSON 字符串中。
對(duì)于更加復(fù)雜的嵌套結(jié)構(gòu)體,也可以使用同樣的方法來(lái)進(jìn)行轉(zhuǎn)換。值得注意的一點(diǎn)是,因?yàn)?JSON 格式的值只能為字符串、數(shù)字、boolean、null、對(duì)象和數(shù)組等類型,所以如果結(jié)構(gòu)體的屬性值類型不是這些類型,轉(zhuǎn)換時(shí)可能會(huì)失敗或得到不符合預(yù)期的結(jié)果。