一、#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。