如何使用Golang实现JSON数据解析_读取和操作JSON文件内容
发布时间 - 2026-01-02 00:00:00 点击率:次Go语言用encoding/json包解析JSON,需定义带json标签的结构体,用json.Unmarshal反序列化、json.Marshal序列化,支持嵌套、数组、动态结构及文件读写,注意错误处理和类型匹配。
Go语言内置的encoding/json包提供了简洁高效的方式解析、读取和操作JSON数据,无需第三方依赖。核心在于理解结构体标签(struct tags)、反序列化(json.Unmarshal)与序列化(json.Marshal)流程,以及如何处理嵌套、动态或不规则JSON。
读取JSON文件并解析为Go结构体
这是最常见场景:将磁盘上的JSON文件内容加载进内存,并映射为类型安全的Go结构体。
- 用
os.ReadFile(Go 1.16+)或ioutil.ReadFile(旧版)读取文件字节流 - 定义与JSON字段一一对应的Go结构体,通过
json:"field_name"标签指定映射关系(支持大小写、省略空值、重命名等) - 调用
json.Unmarshal(data, &v)完成反序列化;注意传入指针,且检查错误
示例:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"` // 空字符串时序列化中忽略
Active bool `json:"active"`
}
data, err := os.ReadFile("user.json")
if err != nil {
log.Fatal(err)
}
var u User
if err := json.Unmarshal(data, &u); err != nil {
log.Fatal(err)
}
fmt.Printf("User: %+v\n", u)
处理嵌套JSON和数组
JSON中常见对象嵌套、数组列表,Go中对应结构体字段可声明为嵌套结构体或切片。
- 嵌套对象:在结构体中嵌入另一个结构体字段,标签照常标注
- JSON数组:字段类型设为
[]T,其中T是元素结构体或基础类型 - 混合数组(如不同对象类型混排)需用
interface{}或json.RawMess延迟解析
age
例如:
type Address struct {
City string `json:"city"`
Zip string `json:"zip"`
}
type Profile struct {
Name string `json:"name"`
Addresses []Address `json:"addresses"`
}
动态解析未知结构的JSON
当JSON结构不确定(如API返回格式多变、配置项灵活),可用map[string]interface{}或json.RawMessage。
-
json.Unmarshal支持直接解析到map[string]interface{},但需类型断言访问值(如v["age"].(float64)) -
json.RawMessage可暂存未解析的JSON片段,推迟到需要时再解,避免重复解析或中间转换开销 - 对深层嵌套路径查找,可配合
gjson等轻量库(非标准库,按需引入)
修改并写回JSON文件
解析后修改结构体字段,再序列化保存即可。
- 修改结构体字段值(如
u.Name = "Alice") - 用
json.MarshalIndent生成格式化JSON(便于阅读和调试),或json.Marshal生成紧凑格式 - 使用
os.WriteFile写入文件;注意设置合理权限(如0644)
示例:
u.Name = "Alice"
u.Active = true
output, err := json.MarshalIndent(u, "", " ")
if err != nil {
log.Fatal(err)
}
if err := os.WriteFile("user.json", output, 0644); err != nil {
log.Fatal(err)
}
不复杂但容易忽略:始终检查Unmarshal/Marshal的错误;注意JSON数字默认解析为float64,整数场景建议显式定义为int并确保源数据合规;时间字段推荐用time.Time配合json:"time,string"实现RFC3339字符串解析。
# js
# json
# go
# golang
# go语言
# 字节
# ai
# 字符串解析
# json数组
# 标准库
# String
# 字符串
# 结构体
# int
# 指针
# Struct
# Interface
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何为API编写文档_Laravel API文档生成与维护方法
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel如何处理异常和错误?(Handler示例)
jQuery validate插件功能与用法详解
制作旅游网站html,怎样注册旅游网站?
js实现点击每个li节点,都弹出其文本值及修改
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Python自动化办公教程_ExcelWordPDF批量处理案例
无锡营销型网站制作公司,无锡网选车牌流程?
如何在腾讯云服务器上快速搭建个人网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
EditPlus中的正则表达式实战(6)
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel如何发送系统通知?(Notification渠道示例)
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
手机软键盘弹出时影响布局的解决方法
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
原生JS获取元素集合的子元素宽度实例
Android使用GridView实现日历的简单功能
大同网页,大同瑞慈医院官网?
如何选择可靠的免备案建站服务器?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Bootstrap CSS布局之列表
Laravel如何使用Telescope进行调试?(安装和使用教程)
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
,南京靠谱的征婚网站?
如何正确下载安装西数主机建站助手?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
深圳网站制作平台,深圳市做网站好的公司有哪些?
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
java获取注册ip实例
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel如何实现API资源集合?(Resource Collection教程)
bing浏览器学术搜索入口_bing学术文献检索地址
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧


age