一、#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/n/228805.html
微信扫一扫
支付宝扫一扫