如何在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; ?>
】
相关推荐
- Mac的Time Machine怎么用_Mac系统
- Win11怎么关闭用户账户控制UAC_Window
- 如何使用Golang log设置日志输出格式_Go
- Windows10怎么备份注册表_Windows1
- 如何在Golang中操作嵌套切片指针_Golang
- Win11怎么忘记WiFi网络_Win11删除已保
- php与c语言在嵌入式中有何区别_对比两者在硬件控
- PythonPandas数据分析教程_数据清洗与处
- Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡
- Python生成器表达式内存优化_惰性计算说明【指
- php能跑在stm32上吗_php在stm32微控
- Win10如何设置双wan路由器 Win10双wa
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- 作用域操作符会影响性能吗_php静态调用性能分析【
- php增删改查在php8里有什么变化_新特性对cu
- 当网站SEO排名下降时,如何应对?
- php怎么捕获异常_trycatch结构处理运行时
- C++如何使用std::optional?(处理可
- c++ std::future和std::prom
- 如何用::实现单例模式_php静态方法与作用域操作
- Python与Docker容器化部署实战_镜像构建
- PHP的Workerman对架构扩展有啥帮助_应用
- 如何在Golang中修改数组元素_通过指针实现原地
- VSC怎样用终端运行PHP_命令行执行脚本的步骤【
- php内存溢出怎么排查_php内存限制调试与优化方
- C++如何编写函数模板?(泛型编程入门)
- Windows10系统怎么查看CPU温度_Win1
- 如何使用Golang模拟请求超时_Golang c
- 如何解决Windows时间不准的问题?(自动同步设
- Python深度学习实战教程_神经网络模型构建与训
- Windows10怎么用“讲述人”读屏辅助 Win
- php怎么下载安装后设置默认字符集_utf8配置步
- Win11怎么更改文件夹图标_自定义Win11文件
- Windows怎样关闭开始菜单推荐广告_Windo
- Win11怎么关闭VBS安全性_Windows11
- Win11怎么开启游戏模式_Windows11优化
- c# 在ASP.NET Core中管理和取消后台任
- Windows怎样关闭锁屏广告_Windows关闭
- PHP cURL GET请求:正确设置请求头与身份
- Golang如何避免指针逃逸_Golang逃逸分析
- 如何使用Golang指针与结构体结合_修改结构体内
- Windows 11如何开启文件夹加密(EFS)_
- 如何使用Golang实现Web表单数据绑定_自动映
- 如何在Golang中引入测试模块_Golang测试
- Win11如何设置文件权限 Win11 NTFS文
- Win11怎么设置桌面图标间距_Windows11
- Python迭代器生成器进阶教程_节省内存与懒加载
- 如何在Golang中捕获JSON序列化错误_Gol
- c# 如何深拷贝和浅拷贝
- C++中的std::shared_from_thi

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