如何用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。

如何用golang使用encoding/json.marshal和unmarshal_golang json序列化反序列化实践

在Go语言中,encoding/json 包提供了对JSON数据的序列化(Marshal)和反序列化(Unmarshal)支持。这是处理API请求、配置文件、数据存储等场景中最常用的功能之一。下面通过实际例子说明如何正确使用 json.Marshaljson.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 进行序列化与反序列化。

SuperDesign SuperDesign

开源的UI设计AI智能体

SuperDesign 216 查看详情 SuperDesign 示例:map 转 JSON

data, _ := 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.Marshaljson.Unmarshal 是Golang开发中的基础技能,结合结构体tag能灵活控制输出格式,适用于Web服务、微服务通信等多种场景。

以上就是如何用Golang使用encoding/json.Marshal和Unmarshal_Golang JSON序列化反序列化实践的详细内容,更多请关注其它相关文章!


# 出现在  # 建设电影网站  # 解放碑网站推广宣传  # 沧州高端网站建设案例  # 镇平网站推广公司哪家好  # 产品营销类网站推广公司  # 宁波新型网站建设哪家好  # 青岛seo外包服务公司  # 杭州seo营销  # 昆山网站建设托管  # 安徽网站建设哪家便宜  # 这是  # 动态网页  # 资源管理  # 为空  # 如何实现  # js  # 如何用  # 数据结构  # 序列化  # json数组  # golang开发  # 字符串解析  # 配置文件  # ai  # 字节  # 编码  # go语言  # golang  # go  # json 


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


相关推荐: 优化Flask模板中SQLAlchemy查询迭代标签:处理字符串空格问题  微信步数怎么刷_微信步数快速提升技巧  123网页端官方登录页 123邮箱网页版即时通讯服务  mysql如何配置从库只读_mysql从库只读设置方法  我居然低估了 DeepSeek,这次更新它做到了这些!  虫虫助手如何更新游戏  Magento 2 产品保存事件中安全更新属性的最佳实践  以下哪一项是古代兵书三十六计中的计谋  Python中深度嵌套字典与列表的数据提取与条件过滤指南  歌词怎么展示在|直播|间视频号?有什么注意事项?  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  J*aScript包管理器_Npm与Yarn对比  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  mysql怎么查询数据_mysql基础查询语句使用教程  餐馆菜篮选购指南  德邦快递查询入口登录官网 德邦快递单号查询系统入口  《书耽》更换手机号方法  人教版电子教材在线获取指南  《雅迪智行》用手机开锁方法  小红书网页版首页入口 小红书网页版电脑端官方登录链接  4399小游戏下装链接 4399小游戏下载链接入口  申通快递查询 申通物流快递单实时查询入口  QQ邮箱手机版网页版 QQ邮箱登录入口地址  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  《土豆雅思》修改密码方法  掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  Django模型动态关联检查:高效管理复杂关系  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  电脑视频号|直播|如何分享屏幕  Linux如何自动分析系统异常日志_Linux日志智能检测  使用document.execCommand实现Web文本编辑器加粗/取消加粗  《下一站江湖2》独孤剑诀习得方法  c++如何使用std::thread::join和detach_c++线程生命周期管理  b站怎么查看视频的码率_b站视频码率查看方法  AO3官方镜像链接 | 最新防走失网址永久收藏  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  在PHP环境中正确加载HTML资源:CSS样式与图片路径指南  手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读  向往的生活小游戏启动处_向往的生活小游戏立即启动  J*aScript事件处理:优化键盘输入与表单提交的实践指南  英雄联盟争者留名活动介绍  圆通快递官网入口查询单号 手机版官方查询入口  如何在mysql中比较InnoDB和MyISAM区别  网页版网易云音乐入口_网易云音乐在线官网登录  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  微信客户端怎么查看二维码_微信客户端个人二维码查看方法 

 2025-11-23

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

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

点击免费数据支持

提交您的需求,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.