答案:Golang中处理JSON需用encoding/json库,固定结构用结构体加tag,动态结构用map[string]interface{},数组用切片解析,序列化用json.Marshal,反序列化用json.Unmarshal,注意omitempty、类型断言和指针传递细节。

在Golang中处理JSON数组与对象,主要依赖标准库 encoding/json。核心操作包括序列化(结构体转JSON)和反序列化(JSON转结构体或map)。下面介绍常见使用方式和技巧。
定义结构体处理JSON对象
如果JSON数据结构固定,推荐使用结构体。通过字段标签(tag)映射JSON键名。
示例:
type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` // omitempty 表示空值时忽略}
使用 json.Unmarshal 解析JSON字符串到结构体:
jsonData := `{"name": "Alice", "age": 25}`var user Usererr := json.Unmarshal([]byte(jsonData), &user)if err != nil { log.Fatal(err)}fmt.Printf("%+vn", user) // 输出:{Name:Alice Age:25 Email:}
使用 map 处理动态JSON对象
当JSON结构不固定或字段未知时,可用 map[string]interface{} 接收。
立即学习“go语言免费学习笔记(深入)”;
var data map[string]interface{}err := json.Unmarshal([]byte(jsonData), &data)if err != nil { log.Fatal(err)}fmt.Println(data["name"]) // 输出 Alice
注意:嵌套对象也会被解析为 map[string]interface{},访问时需类型断言。
处理JSON数组
JSON数组可解析为切片。若元素是对象,可使用结构体切片或 []map[string]interface{}。
结构体切片示例:
type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"`}jsonData := `[{"id":1,"name":"Laptop","price":999.9},{"id":2,"name":"Mouse","price":25.5}]`var products []Producterr := json.Unmarshal([]byte(jsonData), &products)if err != nil { log.Fatal(err)}for _, p := range products { fmt.Printf("产品: %s, 价格: %.2fn", p.Name, p.Price)}
使用切片 + map 处理不确定结构:
var items []map[string]interface{}err := json.Unmarshal([]byte(jsonData), &items)if err != nil { log.Fatal(err)}for _, item := range items { fmt.Println("名称:", item["name"])}
序列化结构体或map为JSON
使用 json.Marshal 将Go数据转换为JSON字节流。
user := User{Name: "Bob", Age: 30}data, err := json.Marshal(user)if err != nil { log.Fatal(err)}fmt.Println(string(data)) // 输出:{"name":"Bob","age":30,"email":""}// 格式化输出(带缩进)data, _ = json.MarshalIndent(user, "", " ")fmt.Println(string(data))
基本上就这些。关键是根据数据是否固定选择结构体还是map,合理使用 tag 控制字段行为。处理数组时注意目标类型的匹配。不复杂但容易忽略细节,比如指针传递和类型断言。
以上就是如何在Golang中处理JSON数组与对象的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1418140.html
微信扫一扫
支付宝扫一扫