golang json迭代不支持索引

时间:2017-01-19 17:52:10

标签: json go

我在golang中使用json解析时遇到了问题。 我使用了一些代码将json解析为map[string]interface{}{},但是当我尝试迭代嵌套字段时,会触发错误(type interface {} does not support indexing)

我想获得以下信息:

  • 遍历每个response->blogs,然后获取位于response->posts->blog_n->photos->original_size
  • 中的original_size照片的网址
  • meta->status
  • response->blog->total_postsresponse->blog->name

以下是指向playground的链接 谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您是否有理由想使用map?要使用地图进行您正在谈论的索引,我认为您还需要嵌套地图

您是否考虑使用嵌套结构,如此处所述Go Unmarshal nested JSON structureUnmarshaling 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} structarrayobject

在Go中,仅导出字段将被填充。

答案 1 :(得分:1)

出现这个错误是因为你的map [key-type]是val-type,而你尝试获取值作为嵌套map。

您可以使用Type Assertion获取价值。

result := m["response"].(map[string]interface{}) 
fmt.Printf("%+v\n", result["blog"])