如何使用Golang json解析数据_Golang json解析与序列化方法
发布时间:2025-12-15 21:43
发布者:网络
浏览次数:Go语言encoding/json包核心是结构体标签和类型匹配,需正确使用json:"key"映射字段、omitempty忽略零值、-忽略字段,解析时传指针并检查error,序列化用json.Marshal。

Go 语言的 encoding/json 包提供了简洁、高效、类型安全的 JSON 解析与序列化能力,核心在于结构体标签(struct tags)和类型匹配。用对了,解析几乎零出错;用错了,常遇到 json: cannot unmarshal 这类错误。
定义结构体并正确使用 json 标签
JSON 键名默认按字段名(首字母大写)匹配,但多数 API 返回的是小写 key(如 "user_id"),这时必须用 json: 标签显式映射:
- 用
json:"user_id"将结构体字段UserID绑定到 JSON 中的"user_id" - 加
,omitempty可忽略零值字段(如空字符串、0、nil 切片)在序列化时不输出 - 用
-表示该字段不参与 JSON 编解码(完全忽略)
示例:
type User struct {
UserID int `json:"user_id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
IsActive bool `json:"is_active"`
Meta map[string]interface{} `json:"-"` // 不参与 JSON 转换
}
解析 JSON 字符串:从 [
]byte 或 string 开始
JSON 解析入口是 json.Unmarshal,它接受 []byte 和指向目标变量的指针:
- 务必传入地址:
json.Unmarshal(data, &u),否则结构体不会被填充 - 检查返回 error,常见错误包括格式非法、类型不匹配、缺少必需字段(非指针字段遇 null)
- 若 JSON 中字段为
null,而结构体字段是非指针类型(如int),会报错;可改用指针(*int)或使用sql.NullXXX类型变体
简单例子:
达芬奇
达芬奇——你的AI创作大师
166
查看详情
data := []byte(`{"user_id":123,"name":"Alice","is_active":true}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", u) // {UserID:123 Name:"Alice" Email:"" IsActive:true}
处理嵌套结构与动态字段
JSON 嵌套对象直接对应嵌套结构体;数组对应 slice;不确定结构可用 map[string]interface{} 或 json.RawMessage 延迟解析:
- 嵌套结构:定义子结构体,字段类型设为该结构体类型即可自动递归解析
- 动态 key:用
map[string]json.RawMessage先“接住”,再按需解析具体字段,避免一次性全解析失败 - 混合类型字段(如 status 可能是 string 或 number):先解析为
interface{},再用 type switch 判断实际类型
序列化结构体为 JSON 字符串
用 json.Marshal 即可,返回 []byte,通常转成 string 使用:
- 支持指针字段:nil 指针序列化为
null;配合omitempty可控制是否省略 - 需要格式化输出(带缩进)?用
json.MarshalIndent(v, "", " ") - 中文不转义?用
json.Encoder并调用SetEscapeHTML(false),或用第三方库如go-json
例如:
u := User{UserID: 456, Name: "Bob", IsActive: false}
b, _ := json.Marshal(u)
fmt.Println(string(b)) // {"user_id":456,"name":"Bob","is_active":false}
基本上就这些。Golang 的 JSON 处理不复杂但容易忽略细节——重点盯住 struct tag、指针与否、error 检查这三点,基本不会翻车。
以上就是如何使用Golang json解析数据_Golang json解析与序列化方法的详细内容,更多请关注其它相关文章!
# html
# js
# json
# go
# golang
# go语言
# ai
# switch
# 格式化输出
# 达芬奇
# 递归
# 序列化
# 如何使用
# 如何用
# 的是
# 相关文章
# 错了
# 这类
# 中文网
# 连云港seo优化厂家
# seo优化排名查询
# 惠阳网站建设
# 小公司网站推广找谁
# 网站的推广当然用易速达
# 天猫网站营销推广策略
# 合格网站建设公司
# seo 小语种
# 网站推广方案靠谱吗
# 儿童网站优化多少钱





]byte 或 string 开始