如何在Golang中使用JSON解析与序列化_处理REST API数据


Go语言内置encoding/json包可高效解析和序列化JSON,只需定义带json标签的导出结构体,用json.Unmarshal解码HTTP响应,json.Marshal编码POST请求体,动态字段可用map[string]interface{}或json.RawMessage处理。

如何在golang中使用json解析与序列化_处理rest api数据

Go 语言内置的 encoding/json 包让 JSON 解析与序列化非常简洁高效,处理 REST API 数据时只需关注结构体定义和编码/解码逻辑,无需第三方库。

定义结构体匹配 JSON 数据结构

Go 中 JSON 序列化依赖结构体字段的可见性(首字母大写)和标签(json:"field_name")。API 返回的 JSON 字段名通常为小写或带下划线,需用标签映射。

  • 字段必须导出(大写开头),否则 json 包无法访问
  • 使用 json:"name" 指定序列化后的键名;json:"name,omitempty" 表示该字段为空值时不输出
  • 嵌套对象、切片、指针均可直接映射,Go 会自动递归处理

例如,解析 GitHub API 的用户信息:

type User struct {
    ID       int    `json:"id"`
    Login    string `json:"login"`
    Name     string `json:"name"`
    Email    string `json:"email,omitempty"`
    PublicRepos int `json:"public_repos"`
}

从 HTTP 响应中解析 JSON 数据

调用 REST API 后,用 json.Unmarshal 将响应体字节切片转为结构体。注意检查错误,并确保响应状态码正常。

立即学习“go语言免费学习笔记(深入)”;

  • 先用 http.Get 或 http.Client.Do 发起请求
  • 读取 Response.Body 到字节切片(推荐用 io.ReadAll)
  • 传入结构体变量地址给 json.Unmarshal,而非结构体本身

示例:

Text-To-Pokemon口袋妖怪 Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪 1487 查看详情 Text-To-Pokemon口袋妖怪
resp, err := http.Get("https://api.github.com/users/octocat")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

body, _ := io.ReadAll(resp.Body)
var user User
if err := json.Unmarshal(body, &user); err != nil {
    log.Fatal("JSON 解析失败:", err)
}
fmt.Printf("用户名: %s, 仓库数: %d\n", user.Login, user.PublicRepos)

将结构体序列化为 JSON 并发送 POST 请求

向 API 提交数据时,用 json.Marshal 把结构体转成 JSON 字节,再作为请求体发送。注意设置 Content-Type: application/json 头。

  • json.Marshal 返回 []byte 和 error,成功后可直接传给 bytes.NewReader
  • 避免手动拼接 JSON 字符串,既易错又难维护
  • 若需格式化输出(如调试),可用 json.MarshalIndent

示例(创建 issue):

type IssueRequest struct {
    Title string `json:"title"`
    Body  string `json:"body"`
}

reqData := IssueRequest{
    Title: "Bug: 登录失败",
    Body:  "在 iOS Safari 上点击登录无响应",
}
payload, _ := json.Marshal(reqData)

client := &http.Client{}
httpReq, _ := http.NewRequest("POST", "https://api.github.com/repos/owner/repo/issues", bytes.NewReader(payload))
httpReq.Header.Set("Content-Type", "application/json")
httpReq.Header.Set("Authorization", "token YOUR_TOKEN")

resp, _ := client.Do(httpReq)
// 处理响应...

处理动态或不确定结构的 JSON

当 API 返回字段不固定(如混合类型、任意键名),可用 map[string]interface{} 或 json.RawMessage 延迟解析。

  • map[string]interface{} 适合快速提取几个已知字段,但类型断言较繁琐
  • json.RawMessage 是未解析的原始字节,适合嵌套结构延迟处理或透传
  • 对部分字段不确定时,可组合使用:确定字段用结构体字段,动态部分用 json.RawMessage

例如处理 webhook 中的未知事件类型:

type WebhookEvent struct {
    EventType string          `json:"event"`
    Payload   json.RawMessage `json:"data"`
}

var event WebhookEvent
json.Unmarshal(data, &event)
// 根据 event.EventType 再决定如何解析 event.Payload

以上就是如何在Golang中使用JSON解析与序列化_处理REST API数据的详细内容,更多请关注其它相关文章!


# git  # 遵义网站推广招聘  # 独立站seo运营规划方案  # seo销售方法  # 网站建设清单模板制作  # 渔药营销推广策略研究报告  # 软文营销推广哪个好用些  # 广告网站建设的重要步骤  # 房地产网站推广传播方案  # 键名  # 几个  # 资源管理  # 只需  # 如何在  # 自己的  # 数据结构  # 序列化  # js  # json  # go  # github  # golang  # go语言  # 编码  # app  # 字节  # safari  # ai  # ios  # re  # 递归  # 加载  # 关键词排名多久有效果  # seo体验度排名 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 更换小红书群背景怎么换?小红书群规则怎么设置?  《王者荣耀世界》英雄获取攻略  J*aScript包管理器_Npm与Yarn对比  163邮箱在线登录 163邮箱网页版在线入口  PHP中实现JSON数据数组分页的教程  嘀嗒顺风车如何开具电子发票  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧  PHP 4 函数中引用参数的默认值限制与解决方案  《飞猪旅行》购买汽车票方法  网站体验不好=浪费钱:如何提升-用户体验效果差  猫眼app抢票快还是小程序快  RxJS中如何高效地在一个函数内处理和合并多个数据集合  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  个人所得税办理入口 个人所得税综合所得年度汇算入口  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  《雷电模拟器》截图方法介绍  Mac怎么关闭按键声音_Mac键盘打字音效设置  漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明  优化Google Charts Gauge:在数据库无数据时显示默认值  《via浏览器》强制缩放网页设置方法  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  京东快递包裹信息查询入口 京东快递官方查询平台入口  AO3中文版手机快速通道_AO3最新稳定链接更新  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  解决CSS background 属性中 cover 关键字的常见误用  西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法  《随手记》关闭首页消息推送方法  支付宝网页版在线入口 支付宝官网电脑登录入口  《鹿路通》退余额方法  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  歌词怎么展示在|直播|间视频号?有什么注意事项?  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  Python高效统计字典嵌套列表值在目标列表中的出现次数  优化CSS动画与J*aScript定时器协同:构建稳定Toast提示  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  优化长HTML属性值:SonarQube警告与实用策略  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  excel怎么制作考勤表 excel考勤模板与函数公式讲解  《原神》月之一版本新增书籍一览  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  学习通网页版个人登录_学习通网页版个人账户登录入口  Linux如何开发轻量级数据服务模块_Linux服务化设计  优化 React onClick 事件处理:函数引用与箭头函数的对比  《万兴喵影》导出视频方法  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用  126邮箱网页在线登录2025_126邮箱网页版入口官方地址 

 2025-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.