新闻中心
如何用Golang使用encoding/json.Marshal和Unmarshal_Golang JSON序列化反序列化实践
Go语言中encoding/json包用于JSON序列化和反序列化。1. json.Marshal将结构体转为JSON,通过json tag控制字段名,omitempty可忽略零值字段;2. json.Unmarshal将JSON解析到结构体,需传指针,缺失字段设为零值;3. 支持map和slice的转换,如map[string]interface{}转JSON及JSON数组转[]map[string]string;4. 注意事项:仅导出字段有效,可用string tag使数字以字符串编码,时间建议用RFC3339格式,多余JSON字段默认被忽略,数值解析为float64或int64。

在Go语言中,encoding/json 包提供了对JSON数据的序列化(Marshal)和反序列化(Unmarshal)支持。这是处理API请求、配置文件、数据存储等场景中最常用的功能之一。下面通过实际例子说明如何正确使用 json.Marshal 和 json.Unmarshal。
1. 使用 json.Marshal 将结构体转为 JSON 字符串
json.Marshal 函数可以将 Go 中的数据结构(如结构体、map、slice等)转换为 JSON 格式的字节流。
示例代码:package main
<p>import (
"encoding/json"
"fmt"
)</p><p>type User struct {
Name string <code>json:"name"</code>
Age int <code>json:"age"</code>
Email string <code>json:"email,omitempty"</code>
IsActive bool <code>json:"is_active"</code>
}</p><p>func main() {
user := User{
Name: "Alice",
Age: 30,
Email: "alice@example.com",
IsActive: true,
}</p><pre class="brush:php;toolbar:false;">data, err := json.Marshal(user)
if err != nil {
fmt.Printf("序列化失败: %v\n", err)
return
}
fmt.Println(string(data)) // 输出: {"name":"Alice","age":30,"email":"alice@example.com","is_active":true}
}
说明:
- 结构体字段上的 json tag 控制字段在 JSON 中的名称。
- omitempty 表示如果字段为空(如零值),则不会出现在输出 JSON 中。
- 如果 Email 字段为空字符串,它将不会出现在最终 JSON 中。
2. 使用 json.Unmarshal 将 JSON 字符串解析为结构体
json.Unmarshal 可以将 JSON 数据解析回 Go 的数据结构。
示例代码:func main() {
jsonData := `{"name":"Bob","age":25,"is_active":false}`
<pre class="brush:php;toolbar:false;">var user User
err := json.Unmarshal([]byte(jsonData), &user)
if err != nil {
fmt.Printf("反序列化失败: %v\n", err)
return
}
fmt.Printf("%+v\n", user) // 输出: {Name:Bob Age:25 Email: IsActive:false}
}
注意:
- 第二个参数必须是指向目标变量的指针,否则无法修改原始值。
- JSON 中缺失的字段会被设置为对应类型的零值(如 string 为 "",int 为 0,bool 为 false)。
3. 处理 map 和 slice 的 JSON 转换
除了结构体,也可以直接对 map 或 slice 进行序列化与反序列化。
PictoGraphic
AI驱动的矢量插图库和插图生成平台
133
查看详情
示例:map 转 JSONdata, _ := json.Marshal(map[string]interface{}{
"id": 1,
"name": "Test",
"tags": []string{"go", "json"},
})
fmt.Println(string(data)) // {"id":1,"name":"Test","tags":["go","json"]}
示例:JSON 数组转 slice
jsonStr := `[{"name":"A"},{"name":"B"}]`
var users []map[string]string
json.Unmarshal([]byte(jsonStr), &users)
fmt.Println(users) // [map[name:A] map[name:B]]
4. 常见注意事项与技巧
- 只有导出字段(首字母大写)才会被 json 包处理。
- 使用 string tag 可让数字以字符串形式编码,例如:
Age int `json:"age,string"`。 - 时间类型通常配合
time.Time和自定义格式使用,建议统一使用 RFC3339 格式。 - 反序列化时若 JSON 字段多于结构体字段,多余字段默认被忽略;若想捕获,可用
map[string]interface{}。 - 浮点数解析默认使用 float64,整数为 int64,注意数值范围。
基本上就这些。掌握 json.Marshal 和 json.Unmarshal 是Golang开发中的基础技能,结合结构体tag能灵活控制输出格式,适用于Web服务、微服务通信等多种场景。
以上就是如何用Golang使用encoding/json.Marshal和Unmarshal_Golang JSON序列化反序列化实践的详细内容,更多请关注其它相关文章!
# 如何用
# 移动网站建设和维护
# 永城抖音营销推广团队有哪些
# 雕牌营销推广方案策划
# 企业seo实战
# 宝安综合网站建设怎么样
# 关于政府网站建设意见
# 淘宝关键词排名一直下降
# 南通seo优化简单吗
# 延津网站优化设计
# 网站响应优化方案设计
# 如何在
# 这是
# 资源管理
# 为空
# 出现在
# js
# 加载
# 数据结构
# 序列化
# json数组
# golang开发
# 字符串解析
# 配置文件
# ai
# 字节
# 编码
# go语言
# golang
# go
# json
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
谷歌推RCS信息存档功能:公司可监控员工私密信息!
AO3最新官网入口公告_2025AO3镜像站实时查询方法
PHP URL参数传递与500错误调试指南
Go Martini框架:动态服务解码后的图片内容
CSS实现侧边栏导航项全宽圆角悬停背景效果
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
创客贴用户入口官网登录 创客贴网页版电脑版系统
蛙漫2台版漫画地址 Manwa2正版网页版链接
Go调试环境为何无法启动_Go调试器启动失败原因与解决策略
斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
解决Django多数据库/多Schema环境下外键迁移问题
CSS子选择器:如何区分并样式化嵌套列表的子层级
在命令行怎么运行html项目_命令行运行html项目方法【教程】
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
抖音创作助手登录入口_抖音创作辅助工具官网直达
Mac怎么查看崩溃日志_Mac控制台错误报告分析
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
excel如何生成目录 excel一键生成工作表目录超链接
零跑汽车11月交付量达70327台 实现连续9个月正增长
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
响应式容器内容自动缩放与宽高比维持教程
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
TikTok国际版官网直达_TikTok国际版官网直达进入在线观看
顺丰快递查询系统 官方正版查询入口
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
支付宝如何设置安全保护_支付宝安全设置的全面教程
漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
解决深度学习模型训练初期异常高损失与完美验证准确率问题
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
J*aScript中在Map循环中检测并处理空数组元素
抖音极速版最新版本 抖音极速版官方下载地址
J*aScript DOM操作:高效清空列表元素的策略与实践
单射、满射与双射的关系 一文理清所有逻辑
在J*aScript中复现SciPy的B样条拟合与求值:关键考量


2025-11-23
浏览次数:次
返回列表