本文介绍如何在 go 中解析动态结构的 json 数据,并通过类型断言逐层访问嵌套在 map[string]interface{} 中的深层字段(如数组内的对象属性),重点解决 `sic` 等多层嵌套键的安全提取问题。
在 Go 中处理结构不确定的 JSON(即无法预先定义 struct)时,通常使用 map[string]interface{} 作为通用解码目标。但其代价是:所有嵌套层级都需手动进行类型断言(type assertion),且必须严格遵循 JSON 类型到 Go 类型的映射规则:
以您提供的 OSHA 示例 JSON 为例,路径 results → est_search → [array items] → sic 实际对应如下类型链:
result["results"] // interface{} → assert to map[string]interface{}
["est_search"] // interface{} → assert to []interface{}
[0] // interface{} → assert to map[string]interface{}
["sic"] // interface{} → assert to map[string]interface{} (since "sic" is an object)因此,正确访问每个 sic 对象的代码应为:
// 解码 JSON 到通用 map
var result map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
log.Fatal("JSON decode error:", err)
}
// 安全遍历 results.est_search 数组
if results, ok := result["results"].(map[string]interface{}); ok {
if estSearch, ok := results["est_search"].([]interface{}); ok {
for i, item :=
range estSearch {
if estMap, ok := item.(map[string]interface{}); ok {
if sic, ok := estMap["sic"].(map[string]interface{}); ok {
href, _ := sic["href"].(string)
text, _ := sic["text"].(string)
fmt.Printf("Item %d: sic.href=%s, sic.text=%s\n", i+1, href, text)
} else {
fmt.Printf("Item %d: 'sic' is missing or not an object\n", i+1)
}
}
}
} else {
log.Println("'est_search' is not a valid array")
}
} else {
log.Println("'results' is not a valid object")
}✅ 关键实践建议:
最终,sic 的值(含 href 和 text)即可被安全、清晰地提取出来——这正是动态 JSON 处理的核心能力。
# js
# json
# go
# 工具
# String
# Boolean
# Array
# Object
# NULL
# 封装
# bool
# Struct
# Interface
# nil
# map
# number
# 对象
# href
# 遍历
# 为例
# 不确定
# 但其
# 都做
# 若需
# 这正是
# 如何在
# 清晰地
# 健壮性
相关文章:
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星在线版空间:自助建站+智能模板一键生成方案
建站之星如何优化SEO以实现高效排名?
Android自定义listview布局实现上拉加载下拉刷新功能
建站VPS选购需注意哪些关键参数?
javascript中的try catch异常捕获机制用法分析
实现点击下箭头变上箭头来回切换的两种方法【推荐】
制作网站的模板软件,网站怎么建设?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何通过免费商城建站系统源码自定义网站主题与功能?
济南网站制作的价格,历城一职专官方网站?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
移民网站制作流程,怎么看加拿大移民官网?
宝塔面板创建网站无法访问?如何快速排查修复?
专业网站建设制作报价,网页设计制作要考什么证?
如何通过主机屋免费建站教程十分钟搭建网站?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
c# 服务器GC和工作站GC的区别和设置
如何在宝塔面板中修改默认建站目录?
如何通过山东自助建站平台快速注册域名?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
网站制作公司,橙子建站是合法的吗?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
企业微网站怎么做,公司网站和公众号有什么区别?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
北京网站制作的公司有哪些,北京白云观官方网站?
深入理解Android中的xmlns:tools属性
如何在阿里云通过域名搭建网站?
如何彻底删除建站之星生成的Banner?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
网站制作的步骤包括,正确网址格式怎么写?
香港网站服务器数量如何影响SEO优化效果?
高防服务器租用指南:配置选择与快速部署攻略
简历在线制作网站免费,免费下载个人简历的网站是哪些?
如何快速选择适合个人网站的云服务器配置?
如何在橙子建站中快速调整背景颜色?
清除minerd进程的简单方法
香港服务器租用每月最低只需15元?
如何通过VPS建站无需域名直接访问?
制作宣传网站的软件,小红书可以宣传网站吗?
网站制作免费,什么网站能看正片电影?
如何在阿里云虚拟主机上快速搭建个人网站?
建站之星导航菜单设置与功能模块配置全攻略
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何做静态网页,sublimetext3.0制作静态网页?
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何注册花生壳免费域名并搭建个人网站?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
*请认真填写需求信息,我们会在24小时内与您取得联系。