json - 具有未知键的 Unmarshall JSON 上的空结构
问题描述
我从 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}}
解决方案
您可以使用值类型为Result
or的地图*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上的示例。
推荐阅读
- react-native - 传递道具的问题
- vb.net - 如何阻止 ListView 在计时器刷新时闪烁?
- go - 一个完成后如何完成所有的goroutine
- javascript - React Native AsyncStorage 甚至在使用 await 和 async 时也会返回 Promise
- javascript - 使用 JavaScript 从 Firebase 下载为 JSON
- curl - 使用 cURL 在 Jenkins UI 中创建文件夹
- android - 如何在 Qt for Android 中使用/链接 OpenCV 3.4.1?
- php - Symfony 4.0 TranslatorInterface 未在类中自动装配
- go - 将反射值投射到 golang 中?
- wpf - WPF中的用户控件VS页面