Go語言中,JSON根據(jù)json包中的Encoder和Decoder兩個類來進行編碼和解碼,其中Encoder可以將Go語言的對象轉(zhuǎn)換為JSON對象,而Decoder則可以將JSON對象轉(zhuǎn)換為Go語言對象。
//示例代碼 type Person struct { Name string `json:"name"` Age int `json:"age"` Address string `json:"address,omitempty"` } func main() { person := Person{"Tom", 18, ""} jsonData, _ := json.Marshal(person) fmt.Println(string(jsonData)) }
在上面這個例子中,Person結(jié)構(gòu)體中的三個屬性分別對應(yīng)JSON對象中的"Name","Age"和"Address",并通過tag來定義了JSON的key值。而在main函數(shù)中,我們將一個Person實例轉(zhuǎn)換成了一個JSON對象,并將其輸出到了控制臺中。
但是,使用Encoder編碼JSON對象并不僅僅是將Go語言的對象轉(zhuǎn)為JSON對象這么簡單,它還能夠進行流式的編碼操作,從而將一個大型的對象以流的方式進行寫入。在Encoder中提供了Encode方法來進行編碼,在其中可以對每個object進行迭代操作,從而實現(xiàn)流式寫出操作。例如:
//示例代碼 type Person struct { Name string `json:"name"` Age int `json:"age"` Address string `json:"address,omitempty"` } func main() { person := Person{"Tom", 18, ""} encoder := json.NewEncoder(os.Stdout) encoder.Encode(person) }
在這個例子中,我們使用了NewEncoder方法創(chuàng)建了一個Encoder,然后通過Encode方法將person對象輸出到了標(biāo)準(zhǔn)輸出中。這樣就可以將 JSON 對象以流的方式輸出
總之,使用Go語言的json.Encoder類可以方便地進行JSON對象的編碼操作,并且可以通過流式寫出操作來完成大型對象的編碼。