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序列化与反序列化

使用encoding/json实现Go中JSON序列化与反序列化,通过结构体tag控制字段映射,omitempty忽略空值,-忽略私有字段,map[string]interface{}处理动态JSON,注意类型断言与浮点精度问题。

如何使用golang处理json序列化与反序列化

在Go语言中处理JSON数据非常常见,主要通过标准库 encoding/json 来实现序列化(结构体转JSON)和反序列化(JSON转结构体)。下面介绍基本用法、常用技巧以及注意事项。

定义结构体并进行JSON序列化

使用 json.Marshal 可将Go结构体转换为JSON字符串。结构体字段需大写(导出),并通过 json tag 控制输出的键名。

package mainimport (    "encoding/json"    "fmt")type User struct {    Name     string `json:"name"`    Age      int    `json:"age"`    Email    string `json:"email,omitempty"` // 当Email为空时不输出    Password string `json:"-"`               // 不参与序列化}func main() {    user := User{        Name:     "Alice",        Age:      30,        Email:    "alice@example.com",        Password: "secret",    }    data, err := json.Marshal(user)    if err != nil {        panic(err)    }    fmt.Println(string(data))    // 输出:{"name":"Alice","age":30,"email":"alice@example.com"}}

从JSON反序列化到结构体

使用 json.Unmarshal 将JSON字节流解析到结构体变量中。确保结构体字段能正确映射JSON中的键。

func main() {    jsonData := `{"name":"Bob","age":25,"email":"bob@example.com"}`    var user User    err := json.Unmarshal([]byte(jsonData), &user)    if err != nil {        panic(err)    }    fmt.Printf("%+vn", user)    // 输出:{Name:Bob Age:25 Email:bob@example.com Password:}}

处理动态或未知结构的JSON

当不清楚JSON结构时,可使用 map[string]interface{}interface{} 进行解析。

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

func main() {    jsonData := `{"name":"Charlie","hobbies":["reading","coding"]}`    var data map[string]interface{}    json.Unmarshal([]byte(jsonData), &data)    fmt.Printf("Name: %sn", data["name"])    fmt.Printf("Hobbies: %vn", data["hobbies"])}

遍历嵌套数据时注意类型断言:

if hobbies, ok := data["hobbies"].([]interface{}); ok {    for _, h := range hobbies {        fmt.Println(h)    }}

常见技巧与注意事项

字段tag中使用 omitempty 可在值为空(零值)时跳过该字段输出 嵌套结构体同样支持json tag控制序列化行为 时间类型通常用 time.Time,配合 “2006-01-02T15:04:05Z” 格式自动解析 注意浮点数精度问题,JSON数字默认解析为 float64 反序列化时,JSON中的字段若在结构体中不存在会被忽略基本上就这些。掌握 MarshalUnmarshal 的使用,结合结构体标签,就能高效处理大多数JSON场景。

以上就是如何使用Golang处理JSON序列化与反序列化的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何使用Golang反射修改结构体值
上一篇 2025年12月16日 03:04:52
Golang开发环境升级与版本管理技巧
下一篇 2025年12月16日 03:05:03

相关推荐

发表回复

登录后才能评论
关注微信