我在golang中使用json解析时遇到了问题。
我使用了一些代码将json解析为map[string]interface{}{}
,但是当我尝试迭代嵌套字段时,会触发错误(type interface {} does not support indexing)
。
我想获得以下信息:
response->blogs
,然后获取位于response->posts->blog_n->photos->original_size
meta->status
response->blog->total_posts
和response->blog->name
以下是指向playground的链接 谢谢你的帮助!
答案 0 :(得分:2)
您是否有理由想使用map
?要使用地图进行您正在谈论的索引,我认为您还需要嵌套地图。
您是否考虑使用嵌套结构,如此处所述Go Unmarshal nested JSON structure和Unmarshaling nested JSON objects in Golang?
对于您的JSON数据,这里有一个示例 - 工作但有限 - struct
。 Go将忽略您不使用的字段。
func main() {
//Creating the maps for JSON
data := &Header{}
//Parsing/Unmarshalling JSON encoding/json
err := json.Unmarshal([]byte(input), &data)
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", m)
}
type Header struct {
Response struct {
Blog struct {
Title string `json:"title"`
} `json:"blog"`
Posts []struct {
Id int64 `json:"id"`
} `json:"posts"`
} `json:"response"`
}
要通过Go获取JSON以执行您想要的操作,您必须了解JSON及其与Go 类型的关系。
通知帖子:
slice
的{{1}}个{J} struct
个array
,object
在Go中,仅导出字段将被填充。
答案 1 :(得分:1)
出现这个错误是因为你的map [key-type]是val-type,而你尝试获取值作为嵌套map。
您可以使用Type Assertion获取价值。
result := m["response"].(map[string]interface{})
fmt.Printf("%+v\n", result["blog"])