Golang JSON处理大全
在Golang中处理JSON时遇到几个问题想请教:
- 如何将一个结构体序列化成JSON字符串?能否自定义字段名称?
- 反序列化JSON时,如果字段不匹配或缺少字段该怎么处理?
- 处理复杂嵌套的JSON数据有什么推荐的方法或技巧?
- 性能优化方面,对于大量JSON数据的解析有什么最佳实践?
- 标准库的encoding/json和第三方库如json-iterator有什么区别?该如何选择?
2 回复
Golang中JSON处理常用方法:
- 序列化:
json.Marshal()将结构体转为JSON - 反序列化:
json.Unmarshal()将JSON转为结构体 - 标签:使用
json:"field"控制字段名 - 流式处理:
json.Encoder/Decoder处理大文件 - 第三方库:如
json-iterator提升性能
注意处理空值、嵌套结构和自定义类型转换。
更多关于Golang JSON处理大全的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang JSON处理大全
编码(序列化)
结构体转JSON
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email,omitempty"`
}
user := User{Name: "Alice", Age: 25}
data, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data)) // {"name":"Alice","age":25}
美化输出
data, err := json.MarshalIndent(user, "", " ")
解码(反序列化)
JSON转结构体
jsonStr := `{"name":"Bob","age":30}`
var user User
err := json.Unmarshal([]byte(jsonStr), &user)
if err != nil {
log.Fatal(err)
}
fmt.Println(user.Name) // Bob
流式处理
编码器
file, _ := os.Create("user.json")
encoder := json.NewEncoder(file)
encoder.SetIndent("", " ")
encoder.Encode(user)
解码器
file, _ := os.Open("user.json")
decoder := json.NewDecoder(file)
var user User
decoder.Decode(&user)
处理动态JSON
interface{}处理未知结构
var data map[string]interface{}
jsonStr := `{"name":"Charlie","details":{"city":"NYC"}}`
json.Unmarshal([]byte(jsonStr), &data)
name := data["name"].(string)
details := data["details"].(map[string]interface{})
city := details["city"].(string)
json.RawMessage延迟解析
type Message struct {
Type string `json:"type"`
Data json.RawMessage `json:"data"`
}
自定义编解码
实现MarshalJSON/UnmarshalJSON
type CustomTime struct {
time.Time
}
func (ct *CustomTime) MarshalJSON() ([]byte, error) {
return []byte(`"` + ct.Format("2006-01-02") + `"`), nil
}
func (ct *CustomTime) UnmarshalJSON(data []byte) error {
// 自定义解析逻辑
}
常用技巧
- omitempty: 空值字段不输出
- -: 忽略字段
json:"-" - string: 数字转字符串
json:"id,string" - 处理HTML字符:
json Encoder.SetEscapeHTML(false)
性能优化
- 对于大量数据,使用流式处理
- 避免频繁的反射,预定义结构体
- 使用json-iterator/go等第三方库提升性能
这些是Golang JSON处理的核心功能,涵盖了日常开发中的大部分使用场景。

