一、#encoding/json包的介紹
在 Golang 中,有一個標準庫叫做 「encoding/json」,提供了將 Golang 中的數據類型轉化為 JSON 的函數。它包括兩個主要功能:Marshal 和 Unmarshal。其中 Marshal 可以將 Go 語言中的數據類型 轉換為 JSON 字元串,而 Unmarshal 可以將 JSON 字元串轉回 Go 語言的數據類型。這個庫的使用方法非常簡單,學習難度也不大。
二、使用Marshal將Map轉換成JSON數據
首先來看一個很簡單的例子:將一個 Map 轉換成 JSON 的代碼如下:
package main import ( "encoding/json" "fmt" ) func main() { myMap := make(map[string]string) myMap["name"] = "Tom" myMap["age"] = "18" result, err := json.Marshal(myMap) if err != nil { fmt.Println("json Marshal failed :", err) return } fmt.Println("result:", string(result)) }
運行結果如下:
result: {"age":"18","name":"Tom"}
可以看到,將 Map 轉換成 JSON 的過程非常簡單,只需要調用 json.Marshal 函數,將 Map 作為參數傳入,就可以得到轉換後的 JSON 字元串。
三、為結構體定義標籤並將Map轉換成JSON數據
在實際的開發中,我們可能會用到結構體來管理數據,比如用戶信息、商品信息等等。下面我們以一個用戶信息為例,並為它定義一個 JSON 標籤,將其轉換成 JSON 格式的字元串。
type User struct { UserName string `json:"userName"` Age int `json:"age"` Address string `json:"address,omitempty"` } func main() { user := User{ UserName: "Tom", Age: 18, } result, err := json.Marshal(user) if err != nil { fmt.Println("json Marshal failed :", err) return } fmt.Println("result:", string(result)) }
運行結果如下:
result: {"userName":"Tom","age":18}
可以看到,我們為結構體定義了一個 JSON 標籤,它的作用是將結構體的欄位名轉換成 JSON 文件中對應的欄位名。
四、使用map[string]interface{}將多個數據類型轉換成JSON數據
通過 map[string]interface{},可以轉換任意複雜的數據類型到 JSON 字元串。下面是一個例子,其中包含一個 Map 和一個切片:
func main() { myMap := make(map[string]interface{}) myMap["name"] = "Tom" myMap["age"] = 18 var score []int score = append(score, 95) score = append(score, 98) score = append(score, 99) myMap["score"] = score result, err := json.Marshal(myMap) if err != nil { fmt.Println("json Marshal failed :", err) return } fmt.Println("result:", string(result)) }
運行結果如下:
result: {"age":18,"name":"Tom","score":[95,98,99]}
通過 map[string]interface{},可以非常方便地轉換任意複雜的數據類型。
五、使用json.Unmarshal將JSON數據轉換為Map
除了將 Golang 中的數據類型轉換為 JSON,我們還可以將 JSON 字元串轉換成 Golang 中的數據類型。這可以通過調用 json.Unmarshal 函數來實現。
func main() { jsonStr := `{"name":"Tom","age":18}` var myMap map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &myMap) if err != nil { fmt.Println("json Unmarshal failed :", err) return } fmt.Println(myMap) }
運行結果如下:
map[age:18 name:Tom]
可以看到,我們成功地將一個 JSON 字元串轉換成了一個 Map。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/228805.html