如何在Golang中写入JSON文件_保存结构体数据到文件

技术百科 P粉602998670 发布时间:2026-01-01 浏览:
Go中保存结构体为JSON文件需用encoding/json.Marshal序列化并os.WriteFile写入,字段须大写导出,推荐用struct tag控制键名和omitempty等行为,支持MarshalIndent生成格式化JSON及直接序列化结构体切片。

在 Go 语言中,将结构体数据保存为 JSON 文件非常简单,核心是使用 encoding/json 包的 json.Marshal 序列化数据,再用 os.WriteFile(或 ioutil.WriteFile,已弃用)写入文件。

定义结构体并标记 JSON 字段名

Go 默认只导出首字母大写的字段,且 JSON 键名默认为字段名。推荐显式使用 struct tag 控制键名、忽略空值等:

例如:

type User struct {
    ID       int    `json:"id"`
    Name     string `json:"name"`
    Email    string `json:"email,omitempty"` // 空字符串时不会出现在 JSON 中
    IsActive bool   `json:"is_active"`
}

序列化结构体并写入文件

使用 json.Marshal 转为字节切片,再用 os.WriteFile 保存到磁盘:

  • 确保结构体字段可导出(首字母大写)
  • 检查 json.Marshal 是否返回错误(如含不可序列化字段:func、channel、map[interface{}]string 等)
  • 指定文件路径和权限(常用 0644

示例代码:

user := User{ID: 1, Name: "Alice", Email: "", IsActive: true}
data, err := json.Marshal(user)
if err != nil {
    log.Fatal("JSON 编码失败:", err)
}

err = os.WriteFile("user.json", data, 0644)
if err != nil {
    log.Fatal("写入文件失败:", err)
}

写入格式化(缩进)JSON

若需人类可读的换行与缩进,用 json.MarshalIndent 替代 Marshal

data, err := json.MarshalIndent(user, "", "  ") // 2个空格缩进
if err != nil {
    log.Fatal(err)
}
os.WriteFile("user_pretty.json", data, 0644)

批量保存结构体切片

支持直接序列化 []User 类型,无需额外循环:

users := []User{
    {ID: 1, Name: "Alice", IsActive: true},
    {ID: 2, Name: "Bob", IsActive: false},
}
data, _ := json.MarshalIndent(users, "", "  ")
os.WriteFile("users.json", data, 0644)


# ai  # 出现在  # 再用  # js  # json  # go  # golang  # 循环  # String  # 编码  # 字节  # 序列化  # Interface  # 结构体  # 保存为  # Struct  # 切片  # map  # channel  # 需用  # 换行  # 字段名  # 首字母  # 键名  # 默认为 


相关栏目: <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 AI推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 SEO优化<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 技术百科<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 谷歌推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 百度推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 网络营销<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 案例网站<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 精选文章<?muma echo $count; ?>

相关推荐

在线咨询

点击这里给我发消息QQ客服

在线咨询

免费通话

24h咨询:4006964355


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部