使用encoding/json实现Go中JSON序列化与反序列化,通过结构体tag控制字段映射,omitempty忽略空值,-忽略私有字段,map[string]interface{}处理动态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("%+v\n", user) // 输出:{Name:Bob Age:25 Email:bob@example.com Password:}}
处理动态或未知结构的JSON
当不清楚JSON结构时,可使用 map[string]interface{} 或 interface{} 进行解析。
Android创建和使用数据库详细指南 中文WORD版
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库–SQLite,本文介绍的就是如何为你的Android应用程序创建和操作SQLite数据库。 数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库,在许多领域广泛使用,如Mozilla FireFox就是使用SQLite来存储配置数据的,iPhon
0 查看详情
立即学习“go语言免费学习笔记(深入)”;
func main() { jsonData := `{"name":"Charlie","hobbies":["reading","coding"]}` var data map[string]interface{} json.Unmarshal([]byte(jsonData), &data) fmt.Printf("Name: %s\n", data["name"]) fmt.Printf("Hobbies: %v\n", 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中的字段若在结构体中不存在会被忽略基本上就这些。掌握 Marshal 和 Unmarshal 的使用,结合结构体标签,就能高效处理大多数JSON场景。
以上就是如何使用Golang处理JSON序列化与反序列化的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1158054.html
微信扫一扫
支付宝扫一扫