golang json 和接口切片

2023-12-11

我在迭代包含接口切片的接口切片时遇到问题。

此问题是在尝试使用返回 JSON 数据的 API 调用时出现的。返回的数据相当多,并且结构根据请求的不同而有很大差异。 API 文档中也没有 JSON 响应的结构,因此我尝试实现一些处理任意 JSON 响应的方法。

目前,当进行初始调用时,它被放入 map[string]interface{} 中,然后运行 ​​switch 语句来确定每个元素的类型,当遇到接口切片时就会出现问题。我似乎对他们无能为力。

我尝试过使用 sort 包几次(特别是 sort 和 slicestable 函数),但没有成功。

我收到的错误是:

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

当我尝试映射接口切片以便我可以再次使用 switch 语句迭代它们时,就会发生这种情况。

output := make(map[string]interface{})
err = json.Unmarshal(body, &output)

fmt.Println(err)
identify(output)

return err
}

func identify(output map[string]interface{}) {
    fmt.Printf("%T", output)
    for a, b := range output {
        switch bb := b.(type) {
        case string:
            fmt.Println("This is a string")
        case float64:
            fmt.Println("this is a float")
        case []interface{}:
            fmt.Println(" is []interface ", bb)
            test := b.(map[string]interface{}) // falis here
            fmt.Println("Success!", test)
        default:
            return
        }
    }
}

因此,基本问题是如何在事先不知道结构的情况下迭代嵌套的接口切片?


好吧,你不能投射[]interface{} to map[string]interface{}。由于它是一个切片,因此您可以迭代它的元素(请注意bb is b已经转换为适当的类型,您不需要转换b again):

    case []interface{}:
        fmt.Println(" is []interface ", bb)
        for _, val := range bb {
            // do something with val
        }
    default:
    ...

为什么你必须面对一些你不知道的事情?您是否有可能重新考虑您的架构并使用已知类型? 你看到了吗使用延迟解组的示例json.RawMessage?或者也许尝试一下实现 Unmarshaler 接口?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang json 和接口切片 的相关文章

  • 使用 json.js 字符串化多维数组时出现问题

    我有以下问题 stringify 但我认为我的 JavaScript 数组一定是错误的 这是我的代码 var questions new Array Valid hover function for i 0 i lt Questions l
  • 我使用go语言打印到POS打印机,但打印出的中文字符很糟糕。 (英语没问题)

    我在用着this https github com alexbrainman printer去打包 一切都很好 但汉字打印得很差 我不擅长这种低级 硬件 编码的事情 所以有人提示我如何纠正我的代码 更新代码 func main testWi
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已
  • 使用 Python 合并 JSON 数据

    作为 Python 程序的一部分 我想合并包含相同结构数据的 JSON 对象 例如 responseStatus SUCCESS responseDetails total 5754 data id 1324651 id 5686131 我
  • 为什么 Go 中不允许在包级别声明短变量?

    这是允许的 package main var a 3 但这不是 package main a 3 为什么不 为什么不能将函数外部的短变量声明视为没有类型的常规声明 只是为了简化解析 根据伊恩 兰斯 泰勒的说法这个线程 https group
  • Volley Json 请求不起作用 - 字符串无法转换为 JsonObject / JsonArray

    我正在开发一个 Android 应用程序并从服务器获取 JsonObject JsonArray 手动将 String 转换为 Json 可以正常工作 我最近切换到 Volley 来处理服务器请求 并且想使用JsonObjectReques
  • 插入 Mysql 表时防止 Json 排序

    在发送 AJAX 请求时 Json Content 的重新排序已经是一个已知问题 但我不知道在将 Json content 插入 JSON 类型的 Mysql 表时也会发生同样的情况 在这种情况下 mysql 服务器在保存之前也会对其内容进
  • JSON - 使用Gson反序列化动态对象

    假设我有一个以下类型的 Java 类 public class MyClass public String par1 public Object par2 然后我有这个 String json par1 val1 par2 subpar1
  • Android Volley 服务器错误

    I am posting data all strings to varchar variables in server but i am getting volley server error or badnetwork performa
  • 如何覆盖 go 模块中的依赖项?

    In dep您可以选择覆盖依赖项并使其指向不同的存储库 例如以下内容https github com kubermatic glog logrus https github com kubermatic glog logrus库一需要将以下
  • ActiveSupport::JSON 解码哈希丢失符号

    我正在尝试序列化和反序列化哈希 当散列被解除序列化时 密钥被解除符号化 例如不是更多 一 而是 一 从 Rails 控制台 gt gt h one gt 1 two gt two one gt 1 two gt two gt gt j Ac
  • 如何读取本地 JSON 文件进行测试

    我正在尝试编写用于 json 验证的单元测试 因为该应用程序严重依赖于来自 REST API 的 json 我有一个包含简单 json 的本地文件 goodFeaturedJson txt 内容 test TEST 测试用例 void te
  • 如何从 golang fyne 容器中删除对象

    我正在开发 GUI 应用程序 需要动态添加和删除 gui 元素 我想知道是否有办法从 golang fyne 容器中删除元素 在下面的示例代码中 我创建了容器并动态添加元素 现在我希望能够删除这些元素而不是隐藏它们 我尝试的一个 解决方案
  • 如何在 Objective C 中创建 json 字符串?

    我必须动态生成一个 json 字符串并需要发送到服务器 有谁知道如何使用NSJSONSerialization 下面是我的字符串 surveyid Survey1 responsetime dd mm yyyy hh mm ss locat
  • WCF 自定义序列化器

    我正在 WCF 中创建一个返回 JSON 的 Web 服务 但 DataContractJsonSerializer 对某些循环引用犹豫不决 在这种特殊情况下我无法删除这些引用 相反 我想使用 Newtonsoft json 库 在 WCF
  • serde_json::from_str 错误,其中字符串来自文件

    extern crate serde json use serde json Value use std fs File use std io prelude fn main let filepath map test anhui txt

随机推荐

  • 辅助服务的“onAccessibilityEvent”函数未被调用

    我正在开发的应用程序遇到了一个相当不幸的问题 该应用程序利用辅助功能服务在通知到达用户设备时对通知进行一些特殊处理 问题是 它工作得很好 但服务的 onAccessibilityEvent 函数从未被调用unless该服务是从 Androi
  • Karate-有什么不丑陋的方式来发送每个请求主体字段都包含格式错误的 API 请求吗?

    我有一个奇怪的问题 我已经有了解决方案 但它非常丑陋 我想知道是否有更好的方法通过空手道或 JS 来做到这一点 我对这两方面都是新手 所以请耐心等待 我正在发送一个带有相当大的请求正文 总共 19 个字段 的 POST 调用 我必须有目的地
  • 嵌套 if 在 php 中不起作用要么不执行任何操作,要么转到代码末尾

    几个小时以来 我一直对这段代码感到沮丧 我只能低头寻求一些帮助 我试图让这些嵌套的 if 工作 但它要么不返回任何内容并且我没有收到任何错误 要么它会到达编码的末尾 它应该事先停止 这些输入均来自组单选按钮 其顺序的原因是 一旦到达正在调用
  • 访问 Vue JS 实例监视对象中的 $refs 数组

    我正在构建一个Vue JSSPA 还有Vuetify 数据表在 v app 内部 我试图在里面设置一个变量观察对象为了FilteredItems 计算属性在数据表内 但我不确定如何访问 refs数组实例内部 我知道可以通过以下方式在实例中访
  • 浮点数的精度

    Python 中的浮点数的精度是多少 它总是双精度还是特定于实现或平台 例如 CPython 和 PyPy 有何不同 From Python文档 浮点数通常使用以下方式实现C 中的双倍 有关的信息精确和内部代表 程序所在机器的浮点数 运行可
  • 捕获已达到 set_time_limit() - PHP [重复]

    这个问题在这里已经有答案了 可能的重复 如何捕获致命错误 PHP 超出最大执行时间 30 秒 我用过set time limit 60 之前很多次 但是 当超过这个值时 是否还有捕获 目前它只是以同样的旧错误进行轰炸 我想捕获它失败然后用我
  • 如何为特定部分固定配方蛋的版本

    我在构建中添加了一个部分来安装 python ldap 如下所述 http bluedynamics com articles jens python ldap as egg with buildout 然而我的构建失败了 While In
  • Service Fabric 中的应用程序洞察?

    我需要在我正在开发的 Azure Service Fabric 应用程序中添加性能日志记录 我尝试遵循以下指南 该指南看起来非常简单明了 https github com Microsoft azure content blob maste
  • 查询嵌套表

    我正在尝试查询NESTED TABLE using PL SQL 几个消息来源告诉我这是可能的 但我不断收到错误消息 ORA 21700 对象不存在或已标记为删除 我不明白为什么它不让我这样做 我已经确定dados变量中有内容 我输出它 c
  • Java比较字符串与正则表达式 - while循环

    我希望用户输入一个字符串 如果该字符串与我的正则表达式不匹配 那么我希望输出一条消息 并且用户再次输入一个值 问题是 即使字符串与正则表达式匹配 它也会将其视为不匹配 我的正则表达式 这应该等于 Name Name A Z a zA Z s
  • 单击复选框数据动态保存到数据库

    当我选中复选框时 我需要一些 js ajax jquery 脚本将数据动态保存到数据库 此时的复选框或加载到记录旁边 并根据是否选中来更改数据库中的变量 但是在我选择一个将其保存到数据库后 我必须重新加载页面 我可以做其他所有事情 但了解如
  • 如何在 React JSX 中使用“< >”

    如何在 React 中使用 作为文本 我想将它用于我的投资组合 你需要使用HTML 实体 HTML 中的保留字符必须替换为字符实体 Result Description Entity Name Entity Number lt less t
  • Kivy:如何将复选框设置为在启动时选中

    如何将 id 设置为蓝色的复选框的状态设置为在启动时检查 我使用 python 3 6 和 Kivy 1 9 2 dev0 我以为线条blue ObjectProperty True in py and value root blue in
  • jQuery 滑块范围:将范围应用为表行的过滤器

    在我的实习中 我必须为表格创建一个过滤器 该过滤器必须仅显示您给定的值之间的行 我使用 jQuery UIrange slider我有一个普通的 HTML 表格 我无法让它工作 我尝试了很多不同的事情 这是我的代码 function sli
  • 在饼图中显示附加值

    我有这个饼图数据的示例 import javafx application Application import javafx collections FXCollections import javafx collections Obse
  • 表单视觉隐藏字段和所需验证使用

    我有一个带有隐藏字段的 HTML5 Bootstrap 表单 style display none 我通过 jQuery 显示 隐藏 show hide 对于字段验证 我使用属性required 我希望所有隐藏字段均按要求显示 但当其中一些
  • PHP将抄送插入邮件功能[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 邮件 抄送字段 我正在使用以下 php 发送电子邮件 我需要将抄送添加到我的电子邮件中 当我尝试插入标头时 html 消息显示原始 html 处理抄送的最佳方式是什么 Thanks heade
  • TS(2352) 声明具有动态属性的对象和一个具有特定类型的属性

    我需要创建一个对象 该对象将包含一个名为 state 的属性 该属性将具有通用类型 所有其他属性将是具有覆盖上下文的函数 我不确定这是否可能 因此我决定写在这里 我有一个代码 declare interface ContextModule
  • MySQL 连接运算符

    我不知道 MySQL 的连接运算符 我已经尝试过这段代码用于串联 SELECT vend name vend country FROM Vendors ORDER BY vend name 但这没有用 我应该使用哪个运算符来连接字符串 是
  • golang json 和接口切片

    我在迭代包含接口切片的接口切片时遇到问题 此问题是在尝试使用返回 JSON 数据的 API 调用时出现的 返回的数据相当多 并且结构根据请求的不同而有很大差异 API 文档中也没有 JSON 响应的结构 因此我尝试实现一些处理任意 JSON