Go通过encoding/json包实现JSON序列化与反序列化,使用结构体标签如json:”name”控制字段映射,omitempty在值为空时忽略字段,json:”-“排除字段;通过json.Marshal将结构体转为JSON字符串,json.Unmarshal将JSON解析到结构体或map;支持嵌套结构与切片,字段需以大写字母开头方可导出。

在Go语言开发中,处理JSON数据是常见需求,特别是在构建Web服务、API接口或配置解析时。Golang通过encoding/json包提供了强大且高效的JSON序列化与反序列化支持。本文将结合实际用法,介绍如何正确使用该功能。
结构体与JSON字段映射
Go中通常使用结构体(struct)来表示JSON数据结构。通过结构体标签(tag),可以控制字段在JSON中的名称和行为。
例如,定义一个用户信息结构体:
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email,omitempty"` Age int `json:"-"`}
说明:
立即学习“go语言免费学习笔记(深入)”;
json:”id”:指定该字段在JSON中显示为”id” omitempty:当Email为空字符串时,序列化结果中将不包含该字段 json:”-“:表示该字段不会被序列化或反序列化
序列化:Go对象转JSON字符串
使用json.Marshal()将Go结构体转换为JSON字节流。
user := User{ID: 1, Name: "Alice", Email: "alice@example.com", Age: 25}data, err := json.Marshal(user)if err != nil { log.Fatal(err)}fmt.Println(string(data))// 输出:{"id":1,"name":"Alice","email":"alice@example.com"}
注意Age字段因使用json:"-"未出现在输出中,Email正常输出。
若想让JSON更易读,可使用json.MarshalIndent()生成格式化JSON。
网页制作与PHP语言应用
图书《网页制作与PHP语言应用》,由武汉大学出版社于2006出版,该书为普通高等院校网络传播系列教材之一,主要阐述了网页制作的基础知识与实践,以及PHP语言在网络传播中的应用。该书内容涉及:HTML基础知识、PHP的基本语法、PHP程序中的常用函数、数据库软件MySQL的基本操作、网页加密和身份验证、动态生成图像、MySQL与多媒体素材库的建设等。
447 查看详情
反序列化:JSON字符串转Go对象
使用json.Unmarshal()将JSON数据解析到结构体或map中。
jsonData := `{"id":2,"name":"Bob","email":"bob@example.com"}`var user Usererr := json.Unmarshal([]byte(jsonData), &user)if err != nil { log.Fatal(err)}fmt.Printf("%+vn", user)// 输出:{ID:2 Name:Bob Email:bob@example.com Age:0}
如果JSON中包含结构体没有的字段,默认会忽略;反之,结构体中有但JSON中缺失的字段会被赋予零值。
对于动态或未知结构的JSON,可以使用map[string]interface{}接收:
var data map[string]interface{}json.Unmarshal([]byte(jsonData), &data)fmt.Println(data["name"]) // 输出:Bob
处理嵌套结构与切片
JSON常包含数组或嵌套对象,Go可通过切片和嵌套结构体处理。
type Order struct { OrderID string `json:"order_id"` Items []Item `json:"items"`}type Item struct { Product string `json:"product"` Count int `json:"count"`}
示例JSON:
{ "order_id": "ORD001", "items": [ {"product": "Laptop", "count": 1}, {"product": "Mouse", "count": 2} ]}
反序列化后可直接访问order.Items[0].Product等字段。
基本上就这些。掌握结构体标签、Marshal/Unmarshal的使用以及对nil、omitempty的处理,就能应对大多数JSON场景。不复杂但容易忽略细节,比如字段必须可导出(大写开头)才会参与序列化。按照规范写,基本不会出问题。
以上就是Golang json数据序列化与反序列化实践的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1145275.html
微信扫一扫
支付宝扫一扫