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

在Go语言的初级项目中,JSON解析与处理是非常常见的需求,尤其是在开发API服务、配置读取或数据交换场景中。Go标准库
encoding/json
Go中通过
struct
json.Marshal
json.Unmarshal
json
例如,定义一个用户结构体:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
}
说明:
立即学习“go语言免费学习笔记(深入)”;
json:"id"
"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结构不固定或部分字段未知时,可以使用
map[string]interface{}interface{}例如解析一段不确定结构的JSON:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
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
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处理需求。不复杂但容易忽略细节,多练几次就能熟练。
以上就是Golang初级项目中JSON解析与处理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号