新闻中心
Golang如何开发基础的JSON序列化与反序列化_Golang JSON序列化反序列化项目实战
定义结构体并使用json标签可实现Go语言中JSON的序列化与反序列化,通过json.Marshal将结构体转为JSON字符串(omitempty可省略空字段),json.Unmarshal将JSON数据解析到结构体,支持嵌套结构与切片,字段需导出(首字母大写)才能被正确处理。

在Go语言开发中,处理JSON数据是常见需求,尤其是在构建Web服务、API接口或微服务通信时。Go标准库encoding/json提供了强大且高效的JSON序列化与反序列化支持,无需引入第三方依赖即可完成大多数场景下的数据转换。
定义结构体以映射JSON数据
要实现JSON的序列化和反序列化,第一步是定义合适的结构体(struct)。结构体字段需使用标签(tag)来指定对应的JSON键名。
例如,描述一个用户信息:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email,omitempty"`
}
说明:
- json:"id" 表示该字段在JSON中对应"id"键
- omitempty 表示当字段为空(如零值)时,序列化结果中将省略该字段
JSON序列化:结构体转JSON字符串
使用json.Marshal函数可将Go对象转换为JSON字节流。
user := User{
ID: 1,
Name: "Alice",
Age: 25,
Email: "",
}
data, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data)) // 输出:{"id":1,"name":"Alice","age":25}
注意Email字段为空字符串,由于使用了omitempty,它没有出现在输出中。
若希望保留空字段,可直接调用json.Marshal,或确保字段有值。
JSON反序列化:JSON字符串解析为结构体
使用json.Unmarshal将JSON数据填充到结构体变量中。
jsonData := `{"id":2,"name":"Bob","age":30,"email":"bob@example.com"}`
var user2 User
err := json.Unmarshal([]byte(jsonData), &user2)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", user2)
// 输出:{ID:2 Name:Bob Age:30 Email:bob@example.com}
只要JSON中的键能与结构体字段匹配(通过json tag),就能成功赋值。
千鹿Pr助手
智能Pr插件,融入众多AI功能和海量素材
128
查看详情
对于未知结构或动态JSON,可以使用map[string]interface{}接收:
var data map[string]interface{}
json.Unmarshal([]byte(jsonData), &data)
fmt.Println(data["name"]) // 输出 Bob
处理嵌套结构与切片
实际项目中JSON常包含数组或嵌套对象。Go结构体可通过嵌套定义支持这类结构。
type Address struct {
City string `json:"city"`
State string `json:"state"`
}
type UserWithAddr struct {
ID int `json:"id"`
Name string `json:"name"`
Hobbies []string `json:"hobbies"`
Address Address `json:"address"`
}
序列化和反序列化方式与简单结构一致,encoding/json会自动递归处理嵌套字段。
例如反序列化以下JSON:
{
"id": 3,
"name": "Charlie",
"hobbies": ["reading", "coding"],
"address": {
"city": "Beijing",
"state": "CN"
}
}
只需调用Unmarshal即可完整映射到结构体。
基本上就这些。掌握结构体标签、Marshal/Unmarshal用法以及嵌套处理,就能应对大多数JSON操作场景。不复杂但容易忽略细节,比如字段必须导出(首字母大写)、正确使用omitempty等。
以上就是Golang如何开发基础的JSON序列化与反序列化_Golang JSON序列化反序列化项目实战的详细内容,更多请关注其它相关文章!
# 为空
# 巴中seo搜索引擎
# 什么网站可以做礼品推广
# 永州关键词排名公司推荐
# 临沂谷歌seo优化
# 南京关键词seo
# 沙嘴办事处网站建设
# 百度seo软件出名乐云seo专家
# 互联网关键词排名技能
# 高端网站建设的现状
# 荣成网站优化企业
# 如何在
# 是在
# 首字母
# 资源管理
# js
# 就能
# 化与
# 加载
# 递归
# 序列化
# 标准库
# 字符串解析
# ai
# 字节
# go语言
# golang
# go
# json
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
漫蛙2网页版漫画入口 漫蛙漫画在线官方登录
J*aScript异步迭代器_j*ascript异步遍历
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
qq音乐在线播放入口_qq音乐电脑版登录链接
微信聊天记录怎么加密_微信聊天记录加密方法
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
如何使 Jest 模拟函数默认抛出错误以提高测试效率
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
AO3最新镜像入口 Archive of Our Own官方平台访问
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
响应式容器内容自动缩放与宽高比维持教程
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
FullCalendar 自定义按钮样式定制指南
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
快速CSGO开箱网站指南 CSGO开箱平台推荐
vivo云服务网页版登录 怎么登录vivo云服务网页版
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
黑猫投诉统一入口官网 消费者权益保护投诉平台
outlook中文官网入口地址 outlook官方中文版直达首页链接
126邮箱账号注册 电脑版登录入口
谷歌推RCS信息存档功能:公司可监控员工私密信息!
夸克浏览器图书入口 夸克手机浏览器阅读入口
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
在VS Code中配置和运行Dart程序的完整步骤
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
解决Bootstrap卡片顶部边距导致背景图下移的问题
漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
响应式图片在网页设计中的正确实现方法
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
顺丰国际快递查询 国际件官方查询入口
cad如何更改注释性对象的比例_cad注释性比例调整方法
React Hooks最佳实践:动态组件状态管理的组件化方案
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
解决深度学习模型训练初期异常高损失与完美验证准确率问题


2025-11-11
浏览次数:次
返回列表
Age: 25,
Email: "",
}
data, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data)) // 输出:{"id":1,"name":"Alice","age":25}