Go語言被譽為互聯網時代的C語言,其優良的并發性能和簡潔的語法使得其成為了當前很多大型互聯網企業后端開發的首選語言。在企業級應用中,JSON作為最常用的數據交互格式之一,也是必不可少的一個部分。Go中的JSON處理庫集成了JSON的編/解碼器,允許我們快速、簡便地將JSON數據轉化為Go語言中的結構化數據類型,以及將Go語言的結構化數據類型轉化為JSON格式。今天我們將通過一些示例來深入了解Golang的JSON處理。
//導入json 包 import "encoding/json" //結構體轉JSON type User struct { UserName string `json:"username"` //結構體成員 Email string `json:"email"` //結構體成員 } func main() { user := User{"cary", "cary@example.com"} userJson, _ := json.Marshal(user) //序列化為JSON fmt.Println(string(userJson)) //輸出JSON }
代碼中調用了函數`json.Marshal()`把結構體轉化為JSON,代碼`fmt.Println(string(userJson))`將JSON數據轉為字符串打印出來,結果如下:
{"username":"cary","email":"cary@example.com"}
在代碼中指定了JSON數據的屬性字段名,使用`json:"username"`來表示結構體成員UserName對應的JSON屬性名是username,`json:"email"`來表示結構體成員Email對應JSON屬性名是email。如果沒有指定JSON屬性名,那么默認使用json的小寫格式。
接下來看一下如何將JSON數據轉化為結構體類型:
//JSON轉結構體 type User struct { UserName string `json:"username"` Email string `json:"email"` } func main() { jsonString := `{"username":"cary","email":"cary@example.com"}` user := User{} json.Unmarshal([]byte(jsonString), &user) //從JSON轉化 fmt.Println(user.UserName, user.Email) //輸出 }
代碼中使用`json.Unmarshal()`函數將JSON數據轉化為結構體類型,將JSON數據以byte格式放入函數中,同時也需要傳入一個結構體實例的指針,解析出來的JSON對象就存儲在此指針指向的對象中。例如,上面的代碼解析出來的結果就是一個實例對象,其中的UserName和Email對應JSON數據中的屬性。 運行代碼,輸出結果如下:
cary cary@example.com
到此,我們已經掌握了基本的JSON數據編解碼技術,在實際開發過程中需要注意結構體中的字段必須為可導出字段即首字母大寫,否則在序列化過程中會忽略掉這些字段。