在现代Web开发和API交互中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读而被广泛使用。作为一门高性能的系统编程语言,Go语言通过标准库中的 encoding/json 包提供了强大的JSON序列化与反序列化功能。
本教程将带你从零开始,深入浅出地掌握 Go语言 JSON序列化 的核心用法,即使是编程小白也能轻松上手!

JSON序列化(也叫编码)是指将Go语言中的数据结构(如结构体、map、slice等)转换为JSON字符串的过程;而反序列化(解码)则是将JSON字符串还原为Go数据结构。
在Go中,这两个操作分别由 json.Marshal() 和 json.Unmarshal() 函数完成。
假设我们有一个用户信息的结构体,想要把它转成JSON格式:
package mainimport ( "encoding/json" "fmt")// 定义一个User结构体type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"`}func main() { user := User{ Name: "张三", Age: 28, Email: "zhangsan@example.com", } // 序列化:结构体 → JSON字节 jsonData, err := json.Marshal(user) if err != nil { fmt.Println("序列化失败:", err) return } // 转为字符串并打印 jsonString := string(jsonData) fmt.Println(jsonString) // 输出:{"name":"张三","age":28,"email":"zhangsan@example.com"}}注意结构体字段后面的 `json:"xxx"` 标签,这是Go的结构体标签(Struct Tag),用于指定该字段在JSON中对应的键名。这是实现 Go结构体转JSON 的关键技巧!
现在我们有了一段JSON字符串,如何把它还原成Go的结构体呢?
func main() { jsonString := `{"name":"李四","age":32,"email":"lisi@example.com"}` var user User // 反序列化:JSON字节 → 结构体 err := json.Unmarshal([]byte(jsonString), &user) if err != nil { fmt.Println("反序列化失败:", err) return } fmt.Printf("用户姓名: %s, 年龄: %d\n", user.Name, user.Age) // 输出:用户姓名: 李四, 年龄: 32}有时我们不希望某些字段出现在JSON中,比如密码字段。可以使用 - 标签:
type SafeUser struct { Name string `json:"name"` Password string `json:"-"` // 不会出现在JSON中}// 或者直接忽略未导出字段(首字母小写)type PrivateUser struct { name string // 首字母小写,不会被序列化 Age int `json:"age"`}encoding/json 包天然支持嵌套结构体、切片(slice)、映射(map)等复杂类型:
type Address struct { City string `json:"city"` State string `json:"state"`}type Person struct { Name string `json:"name"` Hobbies []string `json:"hobbies"` Addr Address `json:"address"`}func main() { p := Person{ Name: "王五", Hobbies: []string{"读书", "游泳"}, Addr: Address{City: "北京", State: "BJ"}, } data, _ := json.Marshal(p) fmt.Println(string(data)) // 输出:{"name":"王五","hobbies":["读书","游泳"],"address":{"city":"北京","state":"BJ"}}}通过本教程,你已经掌握了 Go语言 JSON序列化 的基本与进阶用法。无论是简单的结构体转换,还是复杂的嵌套数据处理,encoding/json 包都能轻松应对。
记住几个关键点:
json.Marshal() 进行序列化(Go → JSON)json.Unmarshal() 进行反序列化(JSON → Go)`json:"字段名"` 控制JSON键名`json:"-"` 忽略敏感字段现在,你可以自信地在你的Go项目中处理JSON数据了!如果你正在开发RESTful API或微服务,这些技能将是你不可或缺的利器。
关键词回顾:Go语言 JSON序列化、encoding/json包教程、Go结构体转JSON、JSON编码解码Go。
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123044.html