我正在尝试使用返回JSON数据的API。嵌套在JSON中的是一个对象数组。数据是结构化的,我正在尝试将该数组转换为对象,但是我空手而归。
换句话说,我有这个:
{
"summary": {
"distances": [
{
"activity": "total",
"distance": 2.83
},
{
"activity": "tracked",
"distance": 2.83
},
{ ... },
{ ... },
{ ... },
{ ... },
{ ... }
]
}
}
而且我想要这样的东西:
"summary": {
"distances": {
"total": 2.83,
"tracked": 2.83,
...
]
}
}
我已经编写了可解组JSON的代码,但是仅当struct的格式与JSON相同时才有效:https://play.golang.org/p/jsu_Ym8kRQd
您无法使用标准库JSON包执行所需的操作。我不知道可以执行此操作的任何第三方JSON解组器。您必须将JSON解组为与您的输入匹配的中间结构,然后将其转换为所需的结构。如果distances
的结构对于所有元素都是相同的,并且如果您尝试将输入JSON转换为所需的输出JSON,则可以使用简单的结构来做到这一点,如下所示:
type Result struct {
Distances map[string]float64
}
func process(input []byte) Result {
var data InputStruct
json.Unmarshal(input,&data)
dest:=Result{Distances:make(map[string]float64)}
for _,dist:=range data.Distances {
dest.Distances[dist.Activity]=dist.Distance
}
return dest
}