新闻中心
如何使用Golang json解析数据_Golang json解析与序列化方法
Go语言encoding/json包核心是结构体标签和类型匹配,需正确使用json:"key"映射字段、omitempty忽略零值、-忽略字段,解析时传指针并检查error,序列化用json.Marshal。

Go 语言的 encoding/json 包提供了简洁、高效、类型安全的 JSON 解析与序列化能力,核心在于结构体标签(struct tags)和类型匹配。用对了,解析几乎零出错;用错了,常遇到 json: cannot unmarshal 这类错误。
定义结构体并正确使用 json 标签
JSON 键名默认按字段名(首字母大写)匹配,但多数 API 返回的是小写 key(如 "user_id"),这时必须用 json: 标签显式映射:
- 用
json:"user_id"将结构体字段UserID绑定到 JSON 中的"user_id" - 加
,omitempty可忽略零值字段(如空字符串、0、nil 切片)在序列化时不输出 - 用
-表示该字段不参与 JSON 编解码(完全忽略)
示例:
type User struct {
UserID int `json:"user_id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
IsActive bool `json:"is_active"`
Meta map[string]interface{} `json:"-"` // 不参与 JSON 转换
}
解析 JSON 字符串:从 [
]byte 或 string 开始
JSON 解析入口是 json.Unmarshal,它接受 []byte 和指向目标变量的指针:
- 务必传入地址:
json.Unmarshal(data, &u),否则结构体不会被填充 - 检查返回 error,常见错误包括格式非法、类型不匹配、缺少必需字段(非指针字段遇 null)
- 若 JSON 中字段为
null,而结构体字段是非指针类型(如int),会报错;可改用指针(*int)或使用sql.NullXXX类型变体
简单例子:
达芬奇
达芬奇——你的AI创作大师
166
查看详情
data := []byte(`{"user_id":123,"name":"Alice","is_active":true}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", u) // {UserID:123 Name:"Alice" Email:"" IsActive:true}
处理嵌套结构与动态字段
JSON 嵌套对象直接对应嵌套结构体;数组对应 slice;不确定结构可用 map[string]interface{} 或 json.RawMessage 延迟解析:
- 嵌套结构:定义子结构体,字段类型设为该结构体类型即可自动递归解析
- 动态 key:用
map[string]json.RawMessage先“接住”,再按需解析具体字段,避免一次性全解析失败 - 混合类型字段(如 status 可能是 string 或 number):先解析为
interface{},再用 type switch 判断实际类型
序列化结构体为 JSON 字符串
用 json.Marshal 即可,返回 []byte,通常转成 string 使用:
- 支持指针字段:nil 指针序列化为
null;配合omitempty可控制是否省略 - 需要格式化输出(带缩进)?用
json.MarshalIndent(v, "", " ") - 中文不转义?用
json.Encoder并调用SetEscapeHTML(false),或用第三方库如go-json
例如:
u := User{UserID: 456, Name: "Bob", IsActive: false}
b, _ := json.Marshal(u)
fmt.Println(string(b)) // {"user_id":456,"name":"Bob","is_active":false}
基本上就这些。Golang 的 JSON 处理不复杂但容易忽略细节——重点盯住 struct tag、指针与否、error 检查这三点,基本不会翻车。
以上就是如何使用Golang json解析数据_Golang json解析与序列化方法的详细内容,更多请关注其它相关文章!
# js
# json
# html
# 儿童网站优化多少钱
# 网站推广方案靠谱吗
# seo 小语种
# 合格网站建设公司
# 天猫网站营销推广策略
# 网站的推广当然用易速达
# 小公司网站推广找谁
# 惠阳网站建设
# seo优化排名查询
# 连云港seo优化厂家
# 中文网
# 这类
# 错了
# 相关文章
# 的是
# 如何用
# 如何使用
# 序列化
# 递归
# 达芬奇
# 格式化输出
# switch
# ai
# go语言
# golang
# go
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
Python实现多节点属性重叠度分析教程
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
汽水音乐在线版入口_汽水音乐网页播放手册
c++如何使用Meson构建系统_c++比CMake更快的构建工具
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口
12306选座怎么选到商务座_12306商务座选择与配置说明
整合Supabase认证与Django模型:跨模式迁移的解决方案
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
fishbowl官网免费版 fishbowl养鱼网站入口
c++ dfs和bfs代码 c++深度广度优先搜索算法
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
J*a实现学校排课程序_面向对象结构化项目示例
抖音网页版快捷访问 抖音网页版网页版入口操作教程
快手官方唯一登录入口 谨防山寨钓鱼网站
Excel Power Pivot如何处理XML数据源 构建高级数据模型
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】
Go Martini框架:动态服务解码后的图片内容
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
苹果手机如何防止被恶意App追踪
抖音创作助手登录入口_抖音创作辅助工具官网直达
怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
Android Studio计算器C键功能异常排查与修复教程
写好的html代码怎么运行出来_运行写好的html代码方法【教程】
大麦的“候补”是什么意思 大麦候补购票规则【详解】
高德地图沿途添加点失败如何解决 高德多点规划方法
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
BetterDiscord插件中安全更新用户简介的实践指南
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
Go语言中动态执行代码字符串的策略与实践
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
谷歌google账号怎么注册账号 谷歌账号注册官方流程
网易大神账号申诉需要多久_网易大神账号申诉流程说明


2025-12-15
浏览次数:次
返回列表
]byte 或 string 开始