新闻中心

如何使用Golang json解析数据_Golang json解析与序列化方法

2025-12-15
浏览次数:
返回列表
Go语言encoding/json包核心是结构体标签和类型匹配,需正确使用json:"key"映射字段、omitempty忽略零值、-忽略字段,解析时传指针并检查error,序列化用json.Marshal。

如何使用golang json解析数据_golang json解析与序列化方法

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账号怎么注册账号 谷歌账号注册官方流程  网易大神账号申诉需要多久_网易大神账号申诉流程说明 

搜索