Go语言通过encoding/json实现JSON处理,使用结构体字段标签如json:"name"进行序列化与反序列化,字段需大写以导出,配合json.Marshal和json.Unmarshal完成数据转换;对于动态结构,可用map[string]interface{}解析,其中JSON数字默认转为float64;嵌套结构可通过结构体嵌套和切片映射复杂数据;注意反序列化传指针、字段可导出及类型断言问题,合理使用omitempty忽略空值,结合time.Time处理时间格式,即可满足多数项目需求。

在Go语言的初级项目中,JSON解析与处理是非常常见的需求,尤其是在开发API服务、配置读取或数据交换场景中。Go标准库
encoding/json提供了简单高效的方式来处理JSON数据,掌握其基本用法能快速提升开发效率。
结构体与JSON的序列化和反序列化
Go中通过
struct与JSON进行映射,使用
json.Marshal和
json.Unmarshal实现序列化与反序列化。结构体字段需以大写字母开头,并通过
json标签指定对应的JSON键名。
例如,定义一个用户结构体:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
}
说明:
立即学习“go语言免费学习笔记(深入)”;
json:"id"
表示该字段在JSON中对应"id"
键omitempty
表示如果字段为空(如零值),序列化时将被忽略
使用示例:
user := User{ID: 1, Name: "Alice"}
jsonData, _ := json.Marshal(user)
fmt.Println(string(jsonData)) // {"id":1,"name":"Alice"}
var decoded User
json.Unmarshal(jsonData, &decoded)
fmt.Printf("%+v\n", decoded)
处理动态或未知结构的JSON
当JSON结构不固定或部分字段未知时,可以使用
map[string]interface{}或interface{}进行解析。
例如解析一段不确定结构的JSON:
本文档主要讲述的是用Apache Spark进行大数据处理——第一部分:入门介绍;Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。 在这个Apache Spark文章系列的第一部分中,我们将了解到什么是Spark,它与典型的MapReduce解决方案的比较以及它如何为大数据处理提供了一套完整的工具。希望本文档会给有需要的朋友带来帮助;感
data := `{"name": "Bob", "age": 30, "active": true}`
var result map[string]interface{}
json.Unmarshal([]byte(data), &result)
for k, v := range result {
fmt.Printf("%s: %v (%T)\n", k, v, v)
}
输出结果会显示每个字段的值及其实际类型,比如
age是
float64(JSON数字默认解析为
float64)。
这种方式适合处理配置、日志或第三方API返回的灵活数据。
嵌套结构与切片处理
实际项目中JSON常包含数组或嵌套对象。Go可通过结构体嵌套和切片自然表达。
例如处理用户列表:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Profile struct {
Age int `json:"age"`
City string `json:"city"`
} `json:"profile"`
}
jsonData := `[{"id":1,"name":"Tom","tags":["dev","go"],"profile":{"age":25,"city":"Beijing"}}]`
var users []User
json.Unmarshal(jsonData, &users)
结构清晰,能准确映射复杂JSON结构。
常见注意事项
在实际使用中,有几个容易忽略但重要的点:
- 结构体字段必须可导出(首字母大写),否则
json
包无法访问 - 反序列化时目标变量需传指针,否则数据无法写入
- 整数和浮点数在解析到
interface{}时均为float64
,需类型断言处理 - 时间字段可配合
time.Time
和json:"time,2006-01-02"
格式化标签使用
基本上就这些。掌握结构体标签、基本序列化函数和动态解析方法,就能应对大多数初级项目中的JSON处理需求。不复杂但容易忽略细节,多练几次就能熟练。









