我正在尝试将json数组放入Google AnalyticsAPI的结构中。
EG:
"rows": [
[
"female",
"18-24",
"1308"
],
[
"female",
"25-34",
"741"
]
]
通常我有键/值所以我可以放json:"gender"
但是没有关键的键,所以它会搜索的值发生变化。
结构将是:
type Row struct {
Gender string `json:"gender"`
AgeRange string `json:"blah"`
Count string `json:"blah"`
}
如果我做len(jResp.Rows)我可以看到它抓住所有十二行/数组,但字段是空的。
答案 0 :(得分:1)
我不认为有可能encoding/json
直接将json解码为 首先在UnmarshalJSON
上实现Row
方法的结构 } type。
func (r *Row) UnmarshalJSON(data []byte) error {
var s []string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
if len(s) >= 3 {
r.Gender = s[0]
r.AgeRange = s[1]
r.Count = s[2]
}
return nil
}
// make sure it's a slice of pointers to Row
type Resp struct {
Rows []*Row `json:"rows"`
}
编辑:修改代码以使其实际编译。下面是一个有效的例子https://play.golang.org/p/eqVQj65xJv。
您也可以先将数据解码为一段字符串,然后遍历结果以构建结构值。
type Resp struct {
Rows [][]string `json:"rows"`
}
type Row struct {
Gender string `json:"gender"`
AgeRange string `json:"blah"`
Count string `json:"blah"`
}
var resp jResp
if err := json.Unmarshal(data, &resp); err != nil {
panic(err)
}
var rows = make([]Row, len(resp.Rows))
for i, r := range resp.Rows {
rows[i] = Row{
Gender: r[0],
AgeRange: r[1],
Count: r[2],
}
}
修改:修复了这个问题。 https://play.golang.org/p/Otb7iULSh3