我正在从API获取JSON,如下所示:
{
"unknownkey" : {
"sum" : 7030.76636,
"low" : 6787.05692,
"avg" : 0.00014
}
}
第一个键是未知的-它会更改,但是内部的结构始终保持相同的键。
在讨论here之后,我创建了以下structs
:
type Order struct {
Result Result `json:"-"`
}
type Result struct {
Sum float64 `json:"sum"`
Low float64 `json:"low"`
Avg float64 `json:"avg"`
}
我尝试像这样取消编组:
var order Order
json.Unmarshal([]byte(body), &order)
但我只是得到一个空结构:
{Result:{Sum:0 Low:0 Avg:0}}
答案 0 :(得分:3)
您可以使用值类型为Result
或*Result
的地图:
var wrapper map[string]Result
if err := json.Unmarshal([]byte(body), &wrapper); err != nil {
panic(err)
}
fmt.Printf("%+v\n", wrapper)
这将导致:
map[unknownkey:{Sum:7030.76636 Low:6787.05692 Avg:0.00014}]
如果您需要Result
对象,请在地图上进行调整:
for key, result := range wrapper {
fmt.Printf("Key: %q, Result: %+v", key, result)
}
这将输出:
Key: "unknownkey", Result: {Sum:7030.76636 Low:6787.05692 Avg:0.00014}
在Go Playground上尝试示例。