我有一些看起来像这样的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
,但这是唯一这样构造的端点。理想情况下,如何才能将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
方法,尽管这对我不起作用。
答案 0 :(得分:3)
您定义的类型previous
将要求您的JSON表示一个对象,该对象的一个顶级字段包含地图。
由于您的JSON直接为地图建模,因此您可以使用map
将其解组。
尝试:
p := make(map[string]Day)
json.Unmarshal(res, &p)