如何将映射嵌入到结构中,使其具有平面 json 表示形式

2023-12-27

为了创建类似表的结构,我在之前的应用程序中以以下格式序列化了行数据:

{ "key1": "...", "key2": "...", "15/04": 1.3, "15/05": 1.2, .... "17/08": 0.8 }

现在我正在尝试用 Go 重写它,以便通过实践经验来学习该语言。在 Go 中,可以通过将两个结构嵌入到另一个结构中来将它们组合在一起。从该结构中编组的 json 将具有平面结构,即生成的 json 对象将具有第一个和第二个结构的字段的并集,而无需嵌套。这是一个例子:https://play.golang.org/p/jbJykip7pw https://play.golang.org/p/jbJykip7pw (from http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/ http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/)

我猜我还可以将映射嵌入到结构中,以便我可以使用以下类型定义对 json 进行编组:

type Row struct {
    key1 string
    key2 string
    RowData
}

type RowData map[string]float64

...
func main() {
    row := Row{
        "...",
        "...",
        RowData{
            "15/04": 1.3, "15/05": 1.2, .... "17/08": 0.8,
        },
    }
}

但这在我的“Row”对象中创建了一个“RowData”字段,而不是将 RowData 中的条目附加到我想要的平面 json 对象中:

{ "key1": "...", "key2": "...", "RowData": { "15/04": 1.3, "15/05": 1.2, .... "17/08": 0.8 } }

我想知道,是否有一种方法可以将映射或切片嵌入到结构中,以便生成的 json 对象是平坦的,而不需要定义MarshalJSON类型上的函数Row?


最简洁的答案是不。该语言不允许您在结构中嵌入任何类型(切片或映射)。

只需使用一个map[string]interface{}。处理这样一个事实:“key1”和“key2”的值是字符串,而其他所有内容都是其他地方的浮点数。这实际上是获得该输出的唯一方法。除此之外,您可以使问题变得尽可能复杂(例如转换为更像您的类型或其他类型),但如果您不愿意实施MarshalJSON唯一能产生您想要的结果的模型是map[string]interface{}

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

如何将映射嵌入到结构中,使其具有平面 json 表示形式 的相关文章

随机推荐

  • 何时使用静态字符串与#define

    我对什么时候最好使用有点困惑 static NSString AppQuitGracefullyKey AppQuitGracefully 代替 define AppQuitGracefullyKey AppQuitGracefully 我
  • 什么是高级模块和低级模块?

    我知道这是以下链接的完全相同的副本 什么是 高级模块 和 低级模块 在依赖倒置原则的背景下 https stackoverflow com questions 3780388 what are high level modules and
  • 更新核心数据对象 swift 3

    我想更新 swift 3 中的核心数据对象 经过一番谷歌搜索后 我没有找到任何有关 swift 3 的信息 所以我的问题是 如何更新 swift 3 中的核心数据对象 使用带有谓词的获取请求来获取现有值 在谓词中使用唯一值 获取对象后 使用
  • Java GUI 自动调整大小

    这里是绘制 GUI 的地方 注意 该类扩展了 JFrame public Cache SubstanceColorChooserUI col new SubstanceColorChooserUI while mode 0 setResiz
  • 在 shell 到 Docker 容器后如何编辑文件?

    我成功地使用以下命令对 Docker 容器进行了 shell 处理 docker exec i t 69f1711a205e bash 现在我需要编辑文件 但里面没有任何编辑器 root 69f1711a205e nano bash nan
  • Alamofire 4 Swift 3 参数编码自定义

    我将我的项目更新为 Swift 3 和 Alamofire 4 我使用的是自定义编码 但它更改为其他编码方法 我无法找到替代方案 等效方案 alamoFire request urlString method HTTPMethod post
  • 如何在 Windows 上的 Git Gui 或 Gitk 中撤消硬重置?

    我在 Windows 上使用 Git Gui 和 Gitk 如何撤消过去两小时内的硬重置 是否可以在不使用命令行的情况下从这些应用程序执行此操作 I saw 这个帖子 https stackoverflow com questions 54
  • 一起记录 Firefox/jQuery/CSS 动画的错误吗?

    我正在编写一个使用 jquery 切换 CSS 类的网站 这些类运行 CSS 动画 在 Google Chrome 和 Internet Explorer 9 10 中 一切正常 在 Firefox Aurora 24 和 Firefox
  • 具有多个客户端的 Azure APIM 和 oAuth 2.0

    我发现很难理解如何使用 oAuth 2 0 区分多个客户端应用程序 使用 APIM 我将后端 Web 服务映射到 Azure API 网关服务 URL 我已将 Oauth 2 0 配置为授予类型作为客户端凭据 因为它是服务到服务集成 在 O
  • 如何在 FDT 内导航/更新 Haxe SDK?

    在 OSX 上 FDT 在此处提供 Haxe SDK Applications FDT 5 app Contents FDT5 haxe haxe 2 09 osx 因为它位于 OSX 包内部 所以我无法导航到它 我如何 在首选项中选择它
  • 为什么 splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: 在 iPhone 6 Plus 上没有被调用?

    我实现了子类UISplitViewController在我的应用程序中 iPhone and iPad 当我旋转设备时 会调用标题中提到的方法Landscape to Portrait方向 除非我在 iPhone 6 Plus 上运行该应用
  • Azure PowerShell - 提取 Azure SQL 数据库信息

    我正在寻找一种方法来提取有关 Azure SQL 数据库的特定信息 已用空间 分配空间和最大存储大小 我知道可以从 Azure 门户获取该信息 但我想使用 PowerShell 来提取它 我已设法使用下面的命令提取一点信息 最大存储大小 但
  • 6000端口有什么特别之处?

    启动你的 Mac 从以下位置获取基本 Flask 应用程序快速启动页面 http flask pocoo org docs 0 10 quickstart 并将端口更改为 6000 这将为您提供以下内容 from flask import
  • 动态 jQuery 变量名

    我想获取 li ID 属性的值 这将是一个 userID 并将其用作字符串的一部分 我最终将使用该字符串作为变量名称的一部分 我将使用这个变量名来创建一个数组 我了解基础知识 但似乎无法找到 jQuery javascript 的正确组合来
  • 将 JavaMail 与自签名证书结合使用

    我有一个包含以下代码的 servlet System setProperty javax net ssl keyStore getServletContext getRealPath keystore jks System setPrope
  • 获取 PushManager 订阅时出错 - JavaScript

    我有以下代码 用于注册服务工作人员并要求用户允许通知 在用户允许推送通知 其中承诺返回 后 我收到错误serviceWorkerRegistration pushManager getSubscription is null 当我关闭浏览器
  • Rails - 显示索引结果并通过 ajax 显示操作

    我有一个非常简单的 Post 资源 有两个操作 索引和显示 我的模板包含一个侧边栏 其中包含指向之前每篇文章的链接 我希望侧边栏链接显示其内容 即 显示 操作的结果 通过阿贾克斯 我知道有很多出色的 http www alfajango c
  • 如何在数据迁移期间使用 mongoose 设置 UpdatedAt 时间戳

    我正在进行从 MS SQL 到 MongoDB 的数据迁移 我正在使用猫鼬 并在我的架构中将时间戳属性设置为 true timestamps true 然后 我尝试设置createdAt和updatedAt字段的值 插入记录时 create
  • 有没有人使用过 ios-sim 实用程序在模拟器中运行 .app 文件?

    如何通过 Developer50ios sim 的路径 我就这样过去了 有什么问题吗 ios sim launch verbose sdk 5 0 env Developer50 这似乎不起作用 I have Developer Devel
  • 如何将映射嵌入到结构中,使其具有平面 json 表示形式

    为了创建类似表的结构 我在之前的应用程序中以以下格式序列化了行数据 key1 key2 15 04 1 3 15 05 1 2 17 08 0 8 现在我正在尝试用 Go 重写它 以便通过实践经验来学习该语言 在 Go 中 可以通过将两个结