Go通过encoding/json包实现JSON处理,使用struct标签映射字段,json.Marshal/Unmarshal进行序列化与反序列化,支持omitempty、-等标签控制输出行为,结构体字段需大写开头,可结合map[string]interface{}处理动态JSON。

在Golang入门项目中,处理JSON数据是常见需求,尤其在构建API服务或读写配置文件时。Go语言通过
encoding/json
包提供了强大且简洁的JSON序列化与反序列化能力。掌握其基本用法和常见技巧,能有效提升开发效率和代码可维护性。
结构体与JSON字段映射
Go中通常使用结构体(struct)来表示JSON数据结构。通过结构体标签(struct tag),可以控制字段在JSON中的名称、是否忽略等行为。
例如,定义一个用户信息结构体:
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` Age int `json:"age,omitempty"` Password string `json:"-"`}
说明:
立即学习“go语言免费学习笔记(深入)”;
json:”id”:将结构体字段ID序列化为JSON中的”id” omitempty:当Age字段为零值(如0)时,不会出现在JSON输出中 json:”-“:Password字段不会被序列化,常用于敏感信息
序列化:结构体转JSON
使用
json.Marshal()
将Go数据结构转换为JSON字节流。
user := User{ ID: 1, Name: "Alice", Email: "alice@example.com", Age: 25, Password: "secret",}data, err := json.Marshal(user)if err != nil { log.Fatal(err)}fmt.Println(string(data))// 输出:{"id":1,"name":"Alice","email":"alice@example.com","age":25}
如果希望输出格式更易读,可使用
json.MarshalIndent()
:
data, _ := json.MarshalIndent(user, "", " ")fmt.Println(string(data))
反序列化:JSON转结构体
使用
json.Unmarshal()
将JSON数据解析到结构体中。
jsonStr := `{"id":2,"name":"Bob","email":"bob@example.com"}`var user2 Usererr := json.Unmarshal([]byte(jsonStr), &user2)if err != nil { log.Fatal(err)}fmt.Printf("%+vn", user2)// 输出:{ID:2 Name:Bob Email:bob@example.com Age:0 Password:}
注意:
传入结构体的指针,否则无法修改原始值 JSON中的字段必须能匹配结构体字段(通过json tag或字段名) 未定义的字段会被忽略,不会报错
处理动态或未知结构JSON
当JSON结构不固定时,可以使用
map[string]interface{}
或
interface{}
。
var data map[string]interface{}json.Unmarshal([]byte(jsonStr), &data)fmt.Println(data["name"]) // 输出:Bob
遍历动态JSON:
for k, v := range data { fmt.Printf("%s: %v (%T)n", k, v, v)}
常见类型对应关系:
JSON数字 → float64(注意不是int) JSON字符串 → string JSON布尔值 → bool JSON对象 → map[string]interface{} JSON数组 → []interface{}基本上就这些。掌握结构体标签、序列化反序列化流程以及动态数据处理,就能在Golang项目中灵活应对大多数JSON场景。不复杂但容易忽略细节,比如字段必须可导出(大写开头)、omitempty的行为等,实践中多加留意即可。
以上就是Golang入门项目中JSON数据序列化实践的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404829.html
微信扫一扫
支付宝扫一扫