具有未知属性名称的结构的嵌套属性?

2024-03-13

我使用 JSON 将一些值从外部源获取到变量中。

我有这样的类型json.Unmarshal https://golang.org/pkg/json#Unmarshal将值放入:

    type Frame struct {
        Type  string
        Value map[string]interface{}
    }

    var data Frame

解组后,我可以通过以下方式访问类型:data.Type

但如果我尝试做类似的事情:

    if data.Type == "image" {
        fmt.Printf("%s\n", data.Value.Imagedata)
    }

编译器抱怨没有这样的值data.Value.Imagedata.

所以我的问题是,如何在 Go 中引用我知道根据某些条件将存在的属性?

这样做有效:

    type Image struct {
        Filename string
    }

    type Frame struct {
        Type  string
        Value map[string]interface{}
    }

但这不是很灵活,因为我会收到不同的Values.


json.Unmarshal将尽力将数据放置在最适合您的类型的位置。从技术上讲,您的第一个示例可以工作,但您正在尝试访问Value带有点符号的字段,即使您将其声明为地图:

这应该会给你某种形式的输出:

if data.Type == 'image'{
    fmt.Printf("%v\n", data.Value["Imagedata"])
}

…考虑到“Imagedata”是 JSON 中的关键。

您可以选择按照您想要或期望的结构深度定义类型,或者使用interface{}然后对值进行类型断言。随着Value字段是地图,您总是可以访问像这样的键Value[key],该映射条目的值为interface{}你可以像这样输入断言Value[key].(float64).

至于更明确的结构,我发现您可以将对象分解为它们自己的类型,或者将其定义为嵌套在一个位置:

嵌套(带有匿名结构)

type Frame struct {
    Type  string
    Value struct {
        Imagedata string `json:"image_data"`
    }
}

单独的结构

type Frame struct {
    Type    string
    Value   value 
}

type value struct {
    Imagedata string `json:"image_data"`
}

我自己还在学习 Go,所以这就是我目前的理解程度:-)。

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

具有未知属性名称的结构的嵌套属性? 的相关文章

随机推荐

  • 如何使用 ASP.Net MVC 制作向导

    我们的网站有多个 向导 在多个页面上收集各种数据 并且直到最后一步才能将其提交到数据库 使用 ASP Net MVC 制作这样的向导的最佳 正确方法是什么 编辑 我的老板现在说 没有 javascript 关于如何绕过该限制有什么想法吗 我
  • 在 D 中制作结构体的堆副本

    如何创建堆栈上结构的垃圾收集副本 来自 C 背景 我的第一个猜测是像下面这样的复制构造函数 但它对于 D 来说似乎不太惯用 而且我在我看过的任何 D 项目中都没有看到过这样的复制构造函数 struct Foo immutable int b
  • 如何从控制器类打开 JavaFX FileChooser?

    我的问题是所有使用的例子FileChooser要求你通过一个阶段 唯一的问题是我的 UI 是在fxml文件 它使用与主阶段分开的控制器类 FXML protected void locateFile ActionEvent event Fi
  • 在 R 中,增长列表与增长向量一样低效吗?

    some list lt list for i in 1 1000 some list i lt i 我想知道如果 some list 是一个向量 这是否同样低效 答案似乎是 是 您可以对其进行基准测试 f function some li
  • 列表框.SelectedItem

    我有一个ListBox与填充的物品TextBoxes 从列表中进行选择时如何识别所选的文本字符串ListBox 这是我的 XAML 代码ListBox
  • CSS 内嵌边框

    我需要创建一个纯色插入边框 这是我正在使用的 CSS 代码 border 10px inset rgba 51 153 0 0 65 不幸的是 这会创建 3D 脊状边框 忽略正方形和黑色描述框 你可以使用box shadow 可能 some
  • 如何从 SvelteKit 应用程序发送安全的 API 请求,而不在客户端显示 API 密钥?

    我正在将 Supabase 用于新的 Sveltekit 应用程序 这个模板 https github com joshnuss svelte supabase 目前 我正在客户端传递 Supabase 密钥 如下所示 const supa
  • 相当于 C++ 中 Rust 的特定模板用法

    Rust 中是否有一个功能可以使这样的事情成为可能 据我所知 Rust 的泛型函 数不可能做到这一点 因为它们仅适用于数据类型 而不适用于值 include
  • 在asp.net core 3.1中使用log4net和Microknights登录数据库不起作用

    我看过很多文章说 net core 不支持 AdoNetAppender 但我们可以使用 MicroKnights 来做同样的事情 我正在尝试使用相同的方法在 net core 3 1 应用程序中实现数据库日志记录 但仍然没有成功 我放置在
  • 网页抓取中如何获取重定向的URL?

    我想要的只是请求实际 url 后重定向的 url 这是实际的网址https metric picodi net us r 19761 当我使用此 url 在浏览器上按 Enter 键时 它会将我重定向到这样的 url https www o
  • 仅将天数和时间(小时 x 分钟 x 秒)转换为时间

    我有一个数据框 在其中比较两个不同日期之间的差异以获得小时和分钟的差异 例如 start date 2018 07 03 16 03 00 data final 2018 07 05 00 00 00 duration data final
  • 交叉联接行为 (SQLServer 2008)

    我一直在尝试找出我的查询的问题 该查询实际上是由 hibernate 从 HQL 生成的 但生成的 SQL 并没有达到我的预期 稍微修改 SQL 会产生正确的结果 但我不确定为什么修改会产生任何差异 原始查询 不返回任何行 select s
  • 如何在 Rust 中惯用地替换特定字符?

    所以我有字符串 Hello World 并想替换 和 这样新字符串就是 Hello World 在 Ruby 中 我们可以使用以下命令轻松完成此操作gsub method Hello World gsub 如何在 Rust 中惯用地做到这一
  • 创建随机二进制文件

    我正在尝试使用 python 创建一个随机二进制文件 这就是我已经得到的 f open filename wb for i in xrange size kb for ii in xrange 1024 4 f write struct p
  • MarshalAs 嵌套结构

    我有两个 C 结构 在从 C 调用 DLL 方法时必须将它们作为参数发送 例如 让我们将它们定义为 struct A int data struct B int MoreData A SomeData 我需要从 C 调用的方法具有以下签名
  • 在 IE 中打开新选项卡

    我正在使用以下代码在 Internet Explorer 中打开网站 ProcessStartInfo startInfo new ProcessStartInfo Arguments http www example com FileNa
  • 更改 use 元素上的 defs 中定义的属性

    如何通过脚本来更改 defs 中定义的 use element 的样式 我试图进入 w3c 工作草案界面 但我迷失在那个迷宫中
  • 在自动布局中将子视图的 X 居中会引发“未准备好约束”

    我有一个自定义 UIView 子类 它是通过笔尖初始化的 In awakeFromNib 我正在创建一个子视图并尝试将其置于其超级视图的中心 self setInteralView UIView alloc init self intern
  • Haskell 性能:组合与应用程序?

    我看到了一些关于函数组合和应用程序之间的相似点和差异以及实现它的各种方法的问题 但是有一件事开始让我有点困惑 据我搜索 还没有被问到 是关于函数组合和应用程序之间的差异表现 当我学习 F 时 我爱上了管道操作符 gt 这在 haskell
  • 具有未知属性名称的结构的嵌套属性?

    我使用 JSON 将一些值从外部源获取到变量中 我有这样的类型json Unmarshal https golang org pkg json Unmarshal将值放入 type Frame struct Type string Valu