gpt4 book ai didi

json - 如何将 map 嵌入到结构中,使其具有平面 json 表示

转载 作者:IT王子 更新时间:2023-10-29 01:36:30 28 4
gpt4 key购买 nike

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

{ "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,
},
}
}

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

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

我想知道,是否有一种方法可以将映射或 slice 嵌入到结构中,以便生成的 json 对象是扁平的,而无需在 Row MarshalJSON 函数?

最佳答案

简短的回答是否定的。该语言不允许您在结构中嵌入任何一种类型( slice 或映射)。

只需使用 map[string]interface{}。处理“key1”和“key2”的值是字符串而其他所有内容都是其他地方的 float 这一事实。这确实是您获得该输出的唯一方式。你可以让问题变得更复杂,超出这个范围(比如转换成更像你的类型之类的)但是如果你不喜欢实现 MarshalJSON 唯一会产生结果的模型你想要的是 map[string]interface{}

关于json - 如何将 map 嵌入到结构中,使其具有平面 json 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com