Go语言处理JSON时,如何实现高效且简洁的编码与解码操作?
- 前端开发
- 2026-01-17
- 4
Go语言的JSON处理:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,Go语言内置了对JSON的支持,这使得在Go中进行JSON处理变得非常方便,以下将详细介绍Go语言中如何进行JSON处理。

JSON编码(Marshal)
将Go结构体转换为JSON格式的过程称为JSON编码,也称为Marshal,使用encoding/json包中的Marshal函数可以实现这一功能。
| 参数 | 说明 |
|---|---|
| v | 要编码的Go结构体或基本数据类型 |
| dest | 编码后的JSON数据将写入到该*bytes.Buffer或[]byte类型中 |
| options | JSON编码选项,如json.MarshalIndent可以美化输出格式 |
以下是一个简单的示例:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Address string `json:"address"` } func main() { p := Person{ Name: "John", Age: 30, Address: "1234 Street", } jsonData, err := json.Marshal(p) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData)) }
JSON解码(Unmarshal)
将JSON数据转换为Go结构体的过程称为JSON解码,也称为Unmarshal,使用encoding/json包中的Unmarshal函数可以实现这一功能。

| 参数 | 说明 |
|---|---|
| src | JSON数据源,可以是[]byte或*string类型 |
| v | 解码后的数据将填充到该Go结构体中 |
以下是一个简单的示例:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Address string `json:"address"` } func main() { jsonData := `{"name":"John","age":30,"address":"1234 Street"}` var p Person err := json.Unmarshal([]byte(jsonData), &p) if err != nil { fmt.Println("Error:", err) return } fmt.Println(p) }
JSON处理技巧
- 使用json:""标签可以忽略结构体字段。
- 使用json:"omitempty"标签可以忽略空值。
- 使用json:"string"标签可以将结构体字段转换为字符串类型。
FAQs
Q1:如何将嵌套结构体转换为JSON?

A1:可以使用嵌套的结构体来实现。
type Address struct { Street string `json:"street"` City string `json:"city"` } type Person struct { Name string `json:"name"` Age int `json:"age"` Address Address `json:"address"` }
Q2:如何将JSON数组转换为Go切片?
A2:可以使用切片类型来接收Unmarshal函数的参数。
type Person struct { Name string `json:"name"` } func main() { jsonData := `[{"name":"John"},{"name":"Jane"}]` var people []Person err := json.Unmarshal([]byte(jsonData), &people) if err != nil { fmt.Println("Error:", err) return } fmt.Println(people) }
国内文献权威来源
- 《Go语言实战》 李沐
- 《Go语言编程》 李松峰
- 《Go语言高级编程》 郭宇光