Go中通过encoding/json包与结构体标签实现JSON编解码,利用json:"name"指定字段名,omitempty省略空值,"-"忽略字段,结合map[string]interface{}处理动态字段,嵌套结构体和切片应对复杂结构,实现Marshaler/Unmarshaler接口自定义时间等类型序列化,需注意导出字段首字母大写及空值判断规则。

在 Go 语言开发中,encoding/json 包与结构体的结合使用是处理 JSON 数据的核心方式。无论是解析 HTTP 请求中的 JSON 数据,还是将程序数据序列化为 JSON 响应,都离不开结构体与 json 标签的合理设计。
Go 中通过结构体字段的标签(tag)控制 JSON 的序列化和反序列化行为。最常见的用法是 json: 标签,用于指定字段在 JSON 中的名称。
例如:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
Age int `json:"-"`
}
说明:
立即学习“go语言免费学习笔记(深入)”;
有时我们无法提前定义所有字段,比如接收第三方 API 的部分未知结构。此时可结合 map[string]interface{} 或嵌套结构体灵活处理。
示例:
type Response struct {
Status string `json:"status"`
Data map[string]interface{} `json:"data"`
}
使用 json.Unmarshal 可将任意 JSON 对象解析到 map 中,之后按需访问字段。注意类型断言的使用:
if name, ok := data["name"].(string); ok {
fmt.Println("Name:", name)
}
</font>
实际应用中,JSON 往往包含数组或嵌套对象。Go 结构体可通过嵌套结构体或切片自然表达。
例如:
type Address struct {
City string `json:"city"`
Zip string `json:"zip"`
}
type User struct {
Name string `json:"name"`
Emails []string `json:"emails"`
Address Address `json:"address"`
}
上述结构能正确解析如下 JSON:
{
"name": "Alice",
"emails": ["a@example.com", "b@example.net"],
"address": {
"city": "Beijing",
"zip": "100000"
}
}
对于特殊类型(如时间格式、枚举值),可实现 json.Marshaler 和 Unmarshaler 接口来自定义编解码逻辑。
常见例子是格式化时间:
type CustomTime struct {
time.Time
}
func (ct *CustomTime) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf(`"%s"`, ct.Time.Format("2006-01-02"))), nil
}
func (ct *CustomTime) UnmarshalJSON(data []byte) error {
loc, _ := time.LoadLocation("Asia/Shanghai")
t, err := time.ParseInLocation(`"2006-01-02"`, string(data), loc)
if err != nil {
return err
}
ct.Time = t
return nil
}
然后在结构体中使用:
type Event struct {
Title string `json:"title"`
Date CustomTime `json:"date"`
}
基本上就这些。合理利用结构体标签、嵌套结构和接口实现,能让 Go 程序轻松应对各种 JSON 场景。关键是结构清晰、标签准确,避免过度依赖泛型 map。不复杂但容易忽略细节,比如大小写导出和 omitempty 的触发条件。
以上就是Golang encodingJSON与结构体结合使用实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号