2 回答
TA贡献2037条经验 获得超6个赞
最简洁的答案是不。该语言不允许您在结构中嵌入任何一种类型(切片或映射)。
只需使用一个map[string]interface{}
. 处理这样一个事实,即“key1”和“key2”的值是字符串,而其他所有内容都是其他地方的浮点数。这确实是您获得该输出的唯一方法。您可以根据需要使问题变得尽可能复杂(例如转换为更像您的类型或其他类型)但如果您反对实现MarshalJSON
唯一能够产生您想要的结果的模型是map[string]interface{}
TA贡献1789条经验 获得超8个赞
我知道已经有一个可接受的答案,但实际上您可以获得指定的“所需的平面 json 对象”。
“RowData”不完全是map[string]float; 获取它的类型将产生“main.RowData”(如果它在包 main 中)。它可以嵌入到结构中。以这个例子,改编自原来的帖子:
package main
import (
"encoding/json"
"fmt"
)
type Row struct {
Key1 string
Key2 string
RowData
}
type RowData map[string]float64
func main() {
row := Row{
RowData: make(map[string]float64),
}
row.RowData["15/04"] = 1.3
row.RowData["15/05"] = 1.2
row.RowData["17/08"] = 0.8
row.Key1 = "value one"
row.Key2 = "value two"
flatJSON, _ := json.Marshal(row)
fmt.Println(string(flatJSON))
}
这将产生:
{"Key1":"value one","Key2":"value two","RowData":{"15/04":1.3,"15/05":1.2,"17/08":0.8}}
字段名称必须大写才能导出,但您可以使用结构标记使它们与问题中指定的确切字符串匹配。
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报