Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何使用Golang json解析数据_Golang json解析与序列化方法_创想鸟

如何使用Golang json解析数据_Golang json解析与序列化方法

Go语言encoding/json包核心是结构体标签和类型匹配,需正确使用json:”key”映射字段、omitempty忽略零值、-忽略字段,解析时传指针并检查error,序列化用json.Marshal。

如何使用golang json解析数据_golang json解析与序列化方法

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 和指向目标变量的指针:

立即学习“go语言免费学习笔记(深入)”;

务必传入地址:json.Unmarshal(data, &u),否则结构体不会被填充 检查返回 error,常见错误包括格式非法、类型不匹配、缺少必需字段(非指针字段遇 null) 若 JSON 中字段为 null,而结构体字段是非指针类型(如 int),会报错;可改用指针(*int)或使用 sql.NullXXX 类型变体

简单例子:

data := []byte(`{"user_id":123,"name":"Alice","is_active":true}`)var u Userif err := json.Unmarshal(data, &u); err != nil {    log.Fatal(err)}fmt.Printf("%+vn", 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解析与序列化方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1428573.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
为什么Go安装后仍然提示未找到Go_Go命令路径未生效解决办法
上一篇 2025年12月17日 01:12:05
如何使用Golang监控文件变更_Golangfsnotify文件监控实现方案
下一篇 2025年12月17日 01:12:19

相关推荐

发表回复

登录后才能评论
关注微信