如何在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.Wri
teFile("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; ?>
】
相关推荐
- Python函数接口稳定性_版本演进解析【指导】
- 如何使用Golang实现RPC序列化与反序列化_G
- Win10怎样清理C盘Steam游戏缓存_Win1
- PHP主流架构怎么集成Redis缓存_配置步骤【方
- 如何在Golang中捕获结构体方法错误_Golan
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- Mac怎么设置登录项_Mac管理开机自启动程序【教
- 如何使用Golang实现路由分组管理_Golang
- Win11讲述人怎么关闭_Win11误触开启语音朗
- Win11怎么解压RAR文件 Win11自带解压功
- Windows10系统服务优化指南_Win10禁用
- 如何使用Golang构建基础消息队列模拟_Gola
- Python实现图数据库操作_Neo4j核心CRU
- Win11怎么更改管理员名字 Win11修改账户名
- Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺
- Go语言中slice追加操作的底层共享机制详解
- Python并发安全问题_资源竞争说明【指导】
- 如何使用Golang捕获并记录协程panic_保证
- Win11如何设置开机问候语 Win11修改登录界
- Windows蓝屏错误0x0000001E怎么修复
- c++如何判断文件是否存在_c++ filesys
- Python 中将 ISO 8601 时间戳转换为
- Go 语言标准库为何不提供泛型 Contains
- Windows服务启动类型恢复方法_错误修改导致的
- 如何使用Golang reflect检查方法数量_
- LINUX如何删除用户和用户组_Linux use
- Windows驱动无法加载错误解决方法_驱动签名验
- Win10如何备份注册表_Win10注册表备份步骤
- Windows 10怎么录屏_Windows 10
- Win10怎么查看内存时序参数_Win10CPU-
- windows如何备份注册表_windows导出和
- LINUX如何查看文件类型_Linux中file命
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- GML (Geography Markup Lan
- Python大型项目拆分策略_模块化解析【教程】
- Win11怎样安装搜狗输入法_Win11安装搜狗输
- Python网络日志追踪_请求定位解析【教程】
- Windows蓝屏错误0x00000023怎么修复
- Mac的“预览”如何合并多个PDF_Mac文件处理
- 如何自定义Windows终端的默认配置文件?(Po
- Win11怎么开启上帝模式_创建Windows 1
- Linux如何挂载新硬盘_Linux磁盘分区格式化
- Python对象生命周期管理_创建销毁说明【指导】
- 如何使用Golang构建简易投票统计功能_Gola
- 如何使用Golang反射将map转换为struct
- PythonWeb前后端整合项目教程_FastAP
- 如何使用Golang benchmark测量函数延
- c# await 一个已经完成的Task会发生什么
- Win10怎样清理C盘阿里旺旺缓存_Win10清理
- php转exe用什么工具打包快_高效打包软件推荐【

teFile("user_pretty.json", data, 0644)
QQ客服