如何在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; ?>
】
相关推荐
- 如何理解Go指针和内存分配关系_Go Pointe
- Windows10如何重置此电脑_Windows1
- PHP的FastAdmin架构适合二次开发吗_特点
- php订单日志怎么在swoole写_php协程sw
- Win10文件历史记录怎么用 Win10开启自动备
- Python函数接口稳定性_版本演进解析【指导】
- Win11怎么设置任务栏对齐方式_Windows1
- 如何在 Pandas 中按元素交集合并两列字符串
- php中::能访问全局变量吗_全局作用域与类作用域
- Win10系统映像怎么恢复 Win10使用系统映像
- Windows10蓝屏代码DPC_WATCHDOG
- Win10怎么设置开机密码_Windows10账户
- php8.4如何调用com组件_php8.4win
- c++中的std::conjunction和std
- mac怎么安装adb_MAC配置Android A
- Go 中 := 短变量声明的类型推导机制详解
- Win11怎么查看电脑配置_Win11硬件配置详细
- 如何在 Python 测试中动态配置 @backo
- Linux如何安装Tomcat应用服务器_Linu
- Win11怎么开启游戏工具栏_Windows11
- Mac如何备份到iCloud_Mac桌面与文稿文件
- 如何在 Go 中创建包含映射(map)的切片(sl
- Django密码修改后会话失效的解决方案
- Python与Docker容器化部署实战_镜像构建
- 如何用正则表达式精确匹配“start”到“end”
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- PhpStorm怎么调试PHP代码_PhpStor
- 如何解决Windows时间不准的问题?(自动同步设
- Win11无法安装软件怎么办_Win11解除应用安
- Win11如何设置开机自动联网 Win11宽带连接
- 如何在 ACF 中正确更新嵌套多层的 Group
- XSLT怎么生成动态的HTML属性名和标签名
- 如何使用Golang管理跨项目依赖_Golang多
- php怎么连接数据库_MySQL数据库连接的基础代
- Win11怎么更改系统语言_Win11中文语言包下
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- Python解释执行模型_字节码流程说明【指导】
- Windows10电脑怎么设置防火墙出站规则_Wi
- 如何使用Golang实现Web表单数据绑定_自动映
- Windows10怎么查看硬件信息_Windows
- PythonPandas数据分析项目教程_时间序列
- Linux如何安装Golang环境_Linux下G
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Win11怎么设置夜间模式_Windows11显示
- MAC如何启用访达侧边栏显示_MAC Finder
- PythonPandas数据分析教程_数据清洗与处
- Python网页解析流程_html结构说明【指导】
- Drupal 中 HTML 链接被重复转义导致渲染
- Mac版Final Cut Pro入门_Mac视频

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