dpge74512 2016-04-02 10:27
浏览 57
已采纳

Golang-无法在[]界面{}中访问地图

I have used json.Unmarshal and extracted json content. I then managed to get one layer deeper into the []interface{} by using the following code:

        response, err := http.Get("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=2B2A0C37AC20B5DC2234E579A2ABB11C&steamids=76561198132612090")
        content, err := ioutil.ReadAll(response.Body)
        defer response.Body.Close()
        if err != nil {
            panic(0)
        }

        var decoded map[string]interface{}
        if err := json.Unmarshal(content, &decoded); err != nil {
            panic(0)
        }

        players := decoded["response"].(map[string]interface{})["players"]
        if err != nil {
            panic(0)
        }

Variable players' type is []interface {} and content is [map[personaname:Acidic]].

How do I access this map? I've tried players["personaname"] but that doesn't seem to work. Any ideas?

  • 写回答

2条回答 默认 最新

  • doudong4532 2016-04-02 11:10
    关注

    Players is a JSON array. Thus you have to convert it to a slice of interface.

    Then you can access any element of the slice and casting it to a map[string]interface{} type.

    Here's the working example

    package main
    
    import (
        "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
    )
    
    func main() {
        response, err := http.Get("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=2B2A0C37AC20B5DC2234E579A2ABB11C&steamids=76561198132612090")
        content, err := ioutil.ReadAll(response.Body)
        defer response.Body.Close()
        if err != nil {
            panic(0)
        }
    
        var decoded map[string]interface{}
        if err := json.Unmarshal(content, &decoded); err != nil {
            panic(0)
        }
    
        players := decoded["response"].(map[string]interface{})["players"]
        if err != nil {
            panic(0)
        }
    
        sliceOfPlayers := players.([]interface{})
        fmt.Println((sliceOfPlayers[0].(map[string]interface{}))["personaname"])
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示