当前位置: 首页 > 面试题库 >

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

晁聪
2023-03-14
问题内容

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

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

现在,我试图用Go重写它,以便通过动手学习语言。在Go中,可以通过将两个结构嵌入到另一个结构中来将它们组合在一起。从该结构中封送的json将具有一个平面结构,即,生成的json对象将具有第一和第二个结构的字段的并集,而不会嵌套。这是一个示例:https
:
//play.golang.org/p/jbJykip7pw(来自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,
        },
    }
}

但这在我的“行”对象中创建了一个字段“行数据”字段,而不是将行数据中的条目追加到所需的平面json对象中:

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

我想知道,是否有一种方法可以将地图或切片嵌入到结构中,以使生成的json对象平坦,而无需MarshalJSON在type上定义函数Row


问题答案:

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

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



 类似资料:
  • 我在Postgres 11.4数据库中有一个表,具有自引用树结构: 每个孩子可以有另一个孩子,嵌套级别没有限制。 我想从中生成一个JSON对象,嵌套所有子对象(复活)。 可以用单个查询解决这个问题吗?或者使用Typeform和一个表的任何其他解决方案<否则我将不得不在服务器端手动绑定数据。 我尝试了这个查询: 结果: 相反,我期望这样:

  • 问题内容: 我知道如何在同一包中的结构中嵌入其他结构,但是如何在其他包的结构中嵌入结构? dog.go main.go 当我运行main.go时,它告诉我一个错误: 问题答案: @simon_xia是正确的,看来您 可能 对Go有点陌生。 首先,欢迎来到社区!! 现在,请扩展一下他的评论… Go并未提供成员/方法的公共/私有范围,而是具有Exporting的概念。因此,如果要允许从另一个包访问方法

  • 如何使用MapStruct映射嵌套列表? 下面是我的实体类: 我想把它映射到: 现在,我的映射器看起来像: 但它只映射“普通”属性,如Long、intger等,但它避免了嵌套列表。

  • 输入 JSON : 预期输出JSON: 目前,我正在使用JOLTtransformJSON处理器和JOLT规范: 但我得到的输出要么是NULL,要么是原始JSON(带有差异规范)。提前感谢。

  • 问题内容: 我想解组结构定义为: 使用似乎只对使用的,而忽略了场:https://play.golang.org/p/WUBfzpheMl 我有一个笨拙的解决方案,我可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。 谢谢! 问题答案: 发生这种情况是因为嵌入在中。这意味着当json库调用unmarshaler时,它最终以on调用了。 因此,在内部,参数包含整个j

  • 我试图写一个规范来使用jolt转换完成下面的转换。我需要将平面JSON转换成嵌套JSON。 输入数据与此问题几乎相同。 Link:将平面json转换为具有多个数组的嵌套Json,并使用Jolt transform在输出中保留空值 我在将平面 JSON 转换为嵌套 JSON 时遇到了一些问题。在这里,我想基于 stoptype 属性聚合数据。我使用 https://jolt-demo.appspot