【发布时间】:2017-12-06 22:42:29
【问题描述】:
在 GO 中,我尝试生成以下 json:
[["my",257.14,257.24],["txt", 121.11, 65.555]]
来自一个正在进行解组的结构 - 我没有这样做。
这是我尝试过的:
x := []MyStruct{{Zero: map[int]string{0: "str"}, One: map[int]float32{1: 5.6}, Two: map[int]float32{1: 5.88}}}
MyStruct 在哪里:
type Timestamp struct {
Zero map[int]string `json:"0"`
One map[int]float32 `json:"1"`
Two map[int]float32 `json:"2"`
}
这会产生错误的 json 结构:
"myStruct":[{"0":{"0":"has"},"1":{"1":5.6},"2":{"1":5.88}}]
也试过this
任何正确方向的线索都将受到高度赞赏。
【问题讨论】:
-
如果你想要 JSON 数组,为什么要使用地图?你需要从那个确切的数据结构开始吗?
-
^.您需要使用切片/数组而不是地图。映射与 JSON 对象相关,而切片/数组与列表相关。试试
[]interface{},而不是map[int]string或map[int]float32,因为你有一个变量类型列表。 -
您可能需要一种适配器方法,将一种结构转换为另一种结构,以便正确解组。在某些情况下,根据数据类型的独特要求,您无法直接进行 1:1 映射来解组,而您的情况可能就是这种情况。例如,传入一个结构切片,返回一个 interface{} 切片,其中值是结构的值。
-
@Li3ro,您的结构是与 JSON 完全不同的结构。具有与 JSON 匹配的结构的 Marshal/unmarshal。
-
如果我的回答对你有用,请告诉我。