Marshal & Unmarshal
在Go語言中,encoding/json標準庫提供了對JSON數據進行編碼(Marshaling)和解碼(Unmarshaling)的功能。
Marshal(編碼)
當有一個Go語言的數據結構,想要將其轉換為JSON格式的字符串時,可以使用json.Marshal函數。這個過程稱為Marshaling或者Serialization(序列化)。
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
p := Person{Name: "John Doe", Age: 30}
jsonData, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonData)) // {"name":"John Doe","age":30}
}
在上面的例子中,我們定義了一個Person結構,創建了一個此結構的實例p,並使用json.Marshal將其轉換為JSON格式的字符串。
Unmarshal(解碼)
當有一個JSON格式的字符串,想要將其轉換為Go語言的數據結構時,可以使用json.Unmarshal函數。這個過程稱為Unmarshaling或者Deserialization(反序列化)。
func main() {
jsonData := []byte(`{"name":"John Doe","age":30}`)
var p Person
err := json.Unmarshal(jsonData, &p)
if err != nil {
log.Fatal(err)
}
fmt.Println(p) // {John Doe 30}
}
在這個例子中,有一個JSON格式的字符串jsonData,並使用json.Unmarshal將其解析為Person結構的實例p。
注意在這兩個過程中,Go語言的結構體字段可以通過標簽(tags)來指定對應的JSON鍵名,以及進行其他一些設定,如忽略字段、條件序列化等。