在Go語(yǔ)言開(kāi)發(fā)中,使用JSON格式進(jìn)行數(shù)據(jù)傳輸和存儲(chǔ)已經(jīng)成為了一個(gè)非常流行的方式。為了方便地處理JSON數(shù)據(jù),在Go語(yǔ)言中提供了一個(gè)JSON包,使用該包可以方便地進(jìn)行JSON數(shù)據(jù)的解析和序列化。
JSON包提供的主要函數(shù)有:
func Marshal(v interface{}) ([]byte, error) func Unmarshal(data []byte, v interface{}) error
其中,Marshal函數(shù)將一個(gè)Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)序列化為JSON字符串,而Unmarshal函數(shù)將JSON字符串反序列化為Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)。
下面是基本的使用示例:
package main import ( "encoding/json" "fmt" ) type User struct { Name string Age int Occupation string } func main() { user := User{ "張三", 20, "學(xué)生", } result, err := json.Marshal(user) if err != nil { fmt.Println("序列化失敗:", err) } fmt.Println(string(result)) var user2 User err = json.Unmarshal(result, &user2) if err != nil { fmt.Println("反序列化失敗:", err) } fmt.Println(user2) }
在上述示例中,我們定義了一個(gè)User結(jié)構(gòu)體,然后通過(guò)Marshal函數(shù)將其序列化為JSON字符串,輸出結(jié)果為:
{"Name":"張三","Age":20,"Occupation":"學(xué)生"}
接著,我們使用Unmarshal函數(shù)將JSON字符串反序列化為一個(gè)新的User結(jié)構(gòu)體并輸出:
{張三 20 學(xué)生}
除了這些基本操作,JSON包還提供了一些高級(jí)用法,例如可以自定義JSON key名稱、使用標(biāo)簽控制JSON序列化/反序列化行為等。