因此,我试图通过ping和终结点获取应用程序的分析数据。我发出了成功的GET请求(那里没有错误),但是我无法解码JSON
我需要将以下json解码为结构
{
"noResultSearches": {
"results": [
{
"count": 1,
"key": "\"note 9\""
},
{
"count": 1,
"key": "nokia"
}
]
},
"popularSearches": {
"results": [
{
"count": 4,
"key": "6"
},
{
"count": 2,
"key": "\"note 9\""
},
{
"count": 1,
"key": "nokia"
}
]
},
"searchVolume": {
"results": [
{
"count": 7,
"key": 1537401600000,
"key_as_string": "2018/09/20 00:00:00"
}
]
}
}
我正在使用以下结构
type analyticsResults struct {
Count int `json:"count"`
Key string `json:"key"`
}
type analyticsVolumeResults struct {
Count int `json:"count"`
Key int64 `json:"key"`
DateAsStr string `json:"key_as_string"`
}
type analyticsPopularSearches struct {
Results []analyticsResults `json:"results"`
}
type analyticsNoResultSearches struct {
Results []analyticsResults `json:"results"`
}
type analyticsSearchVolume struct {
Results []analyticsVolumeResults `json:"results"`
}
type overviewAnalyticsBody struct {
NoResultSearches analyticsNoResultSearches `json:"noResultSearches"`
PopularSearches analyticsPopularSearches `json:"popularSearches"`
SearchVolume analyticsSearchVolume `json:"searchVolume"`
}
我向端点发出GET请求,然后使用响应主体对json进行解码,但出现错误。以下是保留在我的ShowAnalytics
函数中的代码的一部分
func ShowAppAnalytics(app string) error {
spinner.StartText("Fetching app analytics")
defer spinner.Stop()
fmt.Println()
req, err := http.NewRequest("GET", "<some-endpoint>", nil)
if err != nil {
return err
}
resp, err := session.SendRequest(req)
if err != nil {
return err
}
spinner.Stop()
var res overviewAnalyticsBody
dec := json.NewDecoder(resp.Body)
err = dec.Decode(&res)
if err != nil {
return err
}
fmt.Println(res)
return nil
}
json:无法将数组解组到Go结构字段 overviewAnalyticsBody.noResultSearches类型 app.analyticsNoResultSearches
我在这里做错了什么?为什么会出现此错误?
答案 0 :(得分:1)
编辑:编辑后,当前代码按原样工作。在此处查看:Go Playground。
原始答案如下。
您发布的代码与收到的错误之间存在一些不一致之处。
我在Go Playground(here's your version)上尝试过,但出现以下错误:
json:无法将数字解组到字符串类型的Go结构字段analyticsVolumeResults.key
我们收到此错误,因为在JSON searchVolume.results.key
中是一个数字:
"key": 1537401600000,
您在Go模型中使用了string
:
Key string `json:"key"`
如果我们将其更改为int64
:
Key int64 `json:"key"`
它可以工作并打印(在Go Playground上尝试):
{{[{1“ note 9”} {1 nokia}]} {[{4 6} {2“ note 9”} {1 nokia}]} {[{7 1537401600000 2018/09/20 00: 00:00}]}}
如果该键有时可能是数字,有时甚至是string
,那么您也可以在Go模型中使用json.Number
:
Key json.Number `json:"key"`