json - 如何在对象具有字符串键的 Golang 中解组 JSON
问题描述
我有一些看起来像这样的 JSON:
{
"ABC": {"symbol": "abc", "open": 42},
"DEF": {"symbol": "abc", "open": 42},
"GHI": {"symbol": "abc", "open": 42}
}
我不需要 ABC/DEF/GHI 部分,只需要右边的部分。ABC、DEF 和 GHI 的值是entity.Day
我的代码中的类型,如下所示:
type Day struct {
Symbol string `json:"symbol" sql:"symbol"`
Date time.Time `json:"date" sql:"date"`
OpenP float64 `json:"open" sql:"open"`
HighP float64 `json:"high" sql:"high"`
LowP float64 `json:"low" sql:"low"`
CloseP float64 `json:"close" sql:"close"`
VolumeP float64 `json:"volume" sql:"volume"`
Label string `json:"label" sql:"-"`
ChangeOverTime float64 `json:"changeOverTime" sql:"change_over_time"`
UnadjustedVolume float64 `json:"unadjustedVolume" sql:"unadjusted_volume"`
Change float64 `json:"change" sql:"change"`
ChangePercent float64 `json:"changePercent" sql:"change_percent"`
VWAP float64 `json:"vwap" sql:"vwap"`
}
还有其他产生entity.Day
s 的端点,但这是唯一一个具有这种结构的端点。理想情况下,如何将 JSON 解组为entity.Day
s 数组?
我的第一个想法是做一个中间数据结构:
type previous struct {
tckrs map[string]entity.Day
}
p := previous{tckrs: make(map[string]entity.Day)}
json.Unmarshal(res, &p)
该代码产生一个空结构并json.Unmarshal
返回一个 nil 错误。你能帮助我吗?
PS - 我搜索了很多,我发现了类似的答案,还有很多其他人尝试了这种map
方法,尽管这对我不起作用。
解决方案
您定义的类型previous
将要求您的 JSON 表示一个具有包含地图的顶级字段的对象。
由于您的 JSON 直接对地图进行建模,因此您可以使用 amap
来解组它。
试试:
p := make(map[string]Day)
json.Unmarshal(res, &p)