如何在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


相关推荐: php下载安装选zip还是msi格式_两种安装包对比【教程】  如何使用Golang指针与接口结合_实现方法调用和动态类型  mac怎么查看wifi密码_MAC查看已连接WiFi密码方法【技巧】  Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】  Win11如何设置系统声音_Win11系统声音调整教程【攻略】  Python 中将 ISO 8601 时间戳转换为日期并计算日期差值的完整教程  Win11蓝牙开关不见了怎么办_Win11蓝牙驱动丢失修复教程【方法】  php转exe用什么工具打包快_高效打包软件推荐【汇总】  Win11如何设置电源计划_Win11电源计划优化教程【攻略】  Python装饰器设计思路_功能增强机制说明【指导】  php8.4如何调用com组件_php8.4windows下com操作指南【教程】  mac怎么安装字体_MAC添加第三方字体与字体册管理【教程】  Win10怎样清理C盘Steam游戏缓存_Win10清理Steam游戏缓存步骤【步骤】  Win11笔记本怎么看电池健康度_Win11电池报告生成命令【详解】  Win11怎么硬盘分区 Win11新建磁盘分区详细教程【步骤】  Windows11如何设置专注助手_Windows11专注助手使用攻略【技巧】  Windows10如何更改盘符名称_Win10重命名硬盘分区卷标  c# 服务器GC和工作站GC的区别和设置  Python日志系统设计与实现_高可观测性架构实战  php中常量能用::访问吗_类常量与作用域操作符使用场景【汇总】  Mac的访达(Finder)怎么用_Mac文件管理入门教程【详解】  Python性能剖析高级教程_cProfileLineProfiler优化案例解析  如何在Golang中指定模块版本_使用go.mod控制版本号  如何正确访问 Laravel 模型或对象的属性而非调用不存在的方法  Win11怎么关闭粘滞键_彻底禁用Windows 11连按Shift粘滞键【步骤】  Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案  为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】  PowerShell怎么创建复杂的XML结构  Win10任务栏天气和资讯怎么关闭 Win10禁用新闻和兴趣功能【教程】  全球各国上班时间表外贸邮件时间  Python安全爬虫设计_IP代理池与验证码识别策略解析  Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)  如何使用Golang开发基础文件下载功能_Golang HTTP文件响应与缓存实现  Mac如何与安卓手机传文件_Mac和Android设备互通【必备工具】  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  Drupal 中 HTML 链接被重复转义导致渲染异常的解决方案  如何诊断并终止卡死的 multiprocessing 子进程  php怎么下载安装后测试是否成功_简单脚本验证方法【操作】  Win11怎样安装网易云音乐_Win11安装网易云教程【步骤】  Windows系统时间服务错误_W32Time服务修复与同步教学  Windows11怎么自定义任务栏_Windows11任务栏自定义教程【步骤】  如何使用 Selenium 正确获取篮球参考网站球员名单元素列表  Mac怎么开启“任何来源”_Mac安装未签名应用的设置方法【解决】  如何使用Golang管理模块版本_Golanggo mod tidy与升级方法  C#如何使用XPathNavigator高效查询XML  Win11怎么设置右键刷新选项_Windows11显示更多选项技巧  Win11怎么更改任务栏位置_修改注册表将Win11任务栏置顶【教程】  Win11怎么设置开机密码_Windows11账户登录选项PIN码  如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例  PythonWeb前后端整合项目教程_FastAPIReact完整实例 

 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.