Golang 处理复杂格式JSON数据(多类型混合)

简介: Golang 处理复杂格式JSON数据(多类型混合)

补充


以下内容仅做学习参考,使用请使用以下网站获取相应返回JSON结构体:JSON 转 Golang Struct

起因


在调取百度人体检测接口时,返回的JSON数据嵌套了多层,解析为map[string]interface()类型的数据后,在遍历取值过程中出现了一些异常,如下两个等:

cannot range over person_info (type interface {})

interface conversion: interface {} is []interface {}, not map[string]interface {}

原始数据


以下为返回的JSON数据

{
    "person_num": 2,
    "person_info": [
        {
            "attributes": {
                "orientation": {
                    "score": 0.9992424249649048,
                    "name": "正面"
                },
                "gender": {
                    "score": 0.9216505289077759,
                    "name": "男性"
                }
            },
            "location": {
                "score": 0.9567705988883972,
                "top": 327,
                "left": 283,
                "width": 133,
                "height": 152
            }
        },
        {
            "attributes": {
                "orientation": {
                    "score": 0.9960677623748779,
                    "name": "正面"
                },
                "gender": {
                    "score": 0.9766052961349487,
                    "name": "女性"
                }
            },
            "location": {
                "score": 0.9070568680763245,
                "top": 339,
                "left": 488,
                "width": 90,
                "height": 139
            }
        }
    ],
    "log_id": 1471750893281891840
}

处理方式


在处理返回的JSON数据时,Golang需要用特定的数据类型去承接JSON的数据类型,具体如下:

序号 JSON 数据类型 Golang 数据类型
1 booleans bool
2 numbers float64
3 strings string
4 arrays []interface{}
5 objects map[string]interface{}
6 null nil

代码


以下为处理上面原始数据的一段示例,在原始数据中:person_num为numbers类型数据,所以转为float64;person_info为arrays类型,所以转为[]interface{}类型进行处理

  person_num := person["person_num"].(float64)
  person_info := person["person_info"].([]interface{})
  for _, val := range person_info {
    fmt.Println(reflect.TypeOf(val))
  }

参考: (type interface {})" data-link-title="Go cannot range over (type interface {})">Go cannot range over <my var> (type interface {})

lauwen
+关注
目录
打赏
0
0
0
0
5
分享
相关文章
淘宝商品评论API接口,json数据示例参考
淘宝开放平台提供了多种API接口来获取商品评论数据,其中taobao.item.reviews.get是一个常用的接口,用于获取指定商品的评论信息。以下是关于该接口的详细介绍和使用方法:
SPL 处理多层 JSON 数据比 DuckDB 方便多了
esProc SPL 处理多层 JSON 数据比 DuckDB 更便捷,尤其在保留 JSON 层次与复杂计算时优势明显。DuckDB 虽能通过 `read_json_auto()` 将 JSON 解析为表格结构,但面对深层次或复杂运算时,SQL 需频繁使用 UNNEST、子查询等结构,逻辑易变得繁琐。而 SPL 以集合运算方式直接处理子表,代码更简洁直观,无需复杂关联或 Lambda 语法,同时保持 JSON 原始结构。esProc SPL 开源免费,适合复杂 JSON 场景,欢迎至乾学院探索!
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
124 67
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据的方案
最后,记得在任何生产环境部署之前,进行透彻测试以确保一切运转如预期。遵循这些战术,守卫你的网络城堡不再是难题。
74 3
如何在 Postman 中上传文件和 JSON 数据
如果你想在 Postman 中同时上传文件和 JSON 数据,本文将带你一步一步地了解整个过程,包括最佳实践和技巧,让你的工作更轻松。
如何在 Postman 中发送 JSON 数据
我们将深入探讨使用 Postman 发送 JSON 数据这一主题,Postman 是一款强大的 API 测试和开发工具。无论您是经验丰富的开发人员还是新手,掌握这项技能对于高效的 API 测试和开发都至关重要。
怎样用 esProc 计算来自 Restful 的多层 json 数据
esProc 是一款强大的数据处理工具,可简化 Java 处理 Restful 接口返回的复杂多层 JSON 数据的难题。通过 esProc,不仅能轻松访问和解析 Restful 数据,还能高效完成复杂计算任务,并可无缝嵌入 Java 应用中作为计算引擎使用。例如,筛选特定分类订单或计算金额,esProc 的脚本简洁直观,远优于传统 SQL 或纯 Java 实现。此外,esProc 支持安全认证(如 Cookie 和 Token)及 JDBC 集成,为开发者提供灵活高效的解决方案。
|
10月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
315 4
Golang语言之管道channel快速入门篇
|
10月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
140 4
Golang语言文件操作快速入门篇
|
10月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
279 3
Golang语言之gRPC程序设计示例
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等