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


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)


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


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 如何使用Golang构建基础消息队列模拟_Golang消息发送与消费实现方法  Windows系统被恶意软件破坏后的恢复策略_错误提示修复方式  短链接还原php提示内存不足_调整PHP内存限制设置【技巧】  php后缀怎么变mp4能播放_让php伪装mp4正常播放的技巧【技巧】  如何在包含多值的列中精准搜索指定演员?  Windows10系统更新错误0x80070002_Win10自动更新失败手动修复  Windows Defender扫描失败怎么办_安全模块损坏修复方式  如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法  Windows10如何查看蓝屏日志_Win10使用事件查看器分析Dump文件  Win10如何备份驱动程序_Win10驱动备份步骤【攻略】  如何关闭Win10自动更新更新_Win10系统自动更新双重关闭技巧  Windows蓝屏BAD_POOL_HEADER故障详解_蓝屏池损坏错误修复指南  Python项目回滚策略_发布安全说明【指导】  Go 中 := 短变量声明的类型推导机制详解  LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现  使用类变量定义字符串常量时的类型安全最佳实践  Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】  如何使用Golang搭建Web开发环境_快速启动HTTP服务  VSC怎么配置PHP的Xdebug_远程调试设置步骤【详解】  如何使用Golang实现容器自动化运维_Golang Docker运维管理方法  c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】  MySQL 中使用 IF 和 CASE 实现查询字段的条件转换  Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南  c++怎么使用std::filesystem遍历文件夹_c++ 递归查找文件与权限修改【技巧】  Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】  手机php怎么转mp4_手机端php文件转mp4app推荐【指南】  Win11怎么开启剪贴板历史记录_Windows11 Win+V键使用技巧  win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】  如何使用Golang读取日志文件_Golang bufio Scanner日志处理示例  如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】  如何诊断并终止卡死的 multiprocessing 子进程  Win11怎么更改文件夹图标_自定义Win11文件夹外观样式【详解】  Win11键盘快捷键大全_Windows 11常用高效快捷键汇总【技巧】  为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】  c# await 一个已经完成的Task会发生什么  Windows10如何重置此电脑_Windows10电脑重置方法【步骤】  Windows10怎么查看系统激活状态_Windows10激活状态查看方法【教程】  Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】  Python对象生命周期管理_创建销毁解析【教程】  Win11怎么更改鼠标指针_Windows 11自定义鼠标样式与大小【美化】  php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】  Python文件管理规范_工程实践说明【指导】  如何在 Go 后端安全获取并验证前端存储的 JWT?  如何用正则表达式精确匹配最多含一个换行符的起止片段  Win11怎么开启专注模式_Windows11时钟应用Focus Session  Linux怎么查找死循环进程_Linux系统负载分析与进程彻底结束【教程】  php命令行怎么运行_通过CLI模式执行PHP脚本的步骤【说明】  Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】  c++如何实现一个高性能的环形队列(Ring Buffer)_c++无锁实现方法【并发】  Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】 

 2026-01-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.