golang GET请求json类型在运行时错误

im trying to write a small app using usa today's RESTful api in golang, but it seems i have an error in type conversion when trying to parse the GET request from the api. My program compiles which makes me think the types are right, but at run time my program crashes

i got a good idea how to map incoming json in which you don't have premade structures for using the type interface {} from http://blog.golang.org/json-and-go

here's what my golang code looks like:

// get request to API
resp, err := http.Get("http://api.usatoday.com/open/articles/topnews/home?count=10&days=0&page=0&encoding=json&api_key=myApiKey")

if(err == nil){
    body, err := ioutil.ReadAll(resp.Body)
    if(err == nil) {
        var data interface{}
        json.Unmarshal(body, &data)

        var m = data.(map[string] []interface{})            
        var articles = m["stories"]
        var newArticle interface {}

        for newArticle = range articles {
            var n = newArticle.(map[string] string)

            fmt.Printf("<h2>Title: " + n["title"] + "</h2>")
            fmt.Printf("<p>description: " + n["description"] + "</p>")
            fmt.Printf("<p>link to article: " + n["link"] + "</p>")
        }

    } else {
        fmt.Println(err)
    }

} else {
    fmt.Println(err)
}

and here's a small example of the get request response looks like

{
    "stories": [{
        "description": "Despite the fact that shoppers descended upon stores after giving thanks, Black Friday wasn't without its share of brawls.",
        "guid": [{
            "isPermalink": "true",
            "value": "http:\/\/apidata.usatoday.com\/story\/news\/nation-now\/2013\/11\/29\/black-friday-police-violence\/3783467\/?kjnd=Pvzhnh75%2BZ3dnzxHVv571HQOfzKReZECsSPCBGnAiXlbHijpqdc3TQoe4dYfzVlB-8d81f9e3-0b56-421e-a5da-121f9eb83de3_E50GPTZL1%2FYloJsxpxSnp8AhoO2O9prQtDTYiwN3sbV0SfQ5wriH1zooo6XgNPTr"
        }],
        "link": "http:\/\/apidata.usatoday.com\/story\/news\/nation-now\/2013\/11\/29\/black-friday-police-violence\/3783467\/?kjnd=LOCSg6KVoQR3pwnZyGmcgcDZXwce0MwglPkURuQ%2BzMkUdNzQ2GXJr%2FPfLCl4Hf38-8d81f9e3-0b56-421e-a5da-121f9eb83de3_Zp5d44u%2F3U2IkXWRbNP0OwyXjRkEgShxoJC0wp7%2FOJoFPCI979Zw4qgNkWkOG1x1",
        "pubDate": "Fri, 29 Nov 2013 02:57:43 GMT",
        "title": "Black Friday frenzy leads to reports of violence"
    }, {
        "description": "President Obama's law faces hurdles beyond the Supreme Court case on the birth control mandate.",
        "guid": [{
            "isPermalink": "true",
            "value": "http:\/\/apidata.usatoday.com\/story\/news\/politics\/2013\/11\/29\/supreme-court-obamacare-lawsuits-irs\/3760811\/?kjnd=sCqadf244XkWTNcS0zAI%2Ba25XsnxwAX3ahu8NP0bzKdU4Kx31rJsa0cWlhvnwMl8-8d81f9e3-0b56-421e-a5da-121f9eb83de3_wtrtyHNPao7CqrB0IR7%2Bj3GFwJMhSYFSrOrrGZCkX2BStipIyyDtQoTLLFCGoLj0"
        }],
        "link": "http:\/\/apidata.usatoday.com\/story\/news\/politics\/2013\/11\/29\/supreme-court-obamacare-lawsuits-irs\/3760811\/?kjnd=Be2GdDxc2cZdIOPiCpcL9vz%2FFvmT859xSGoVutxwurqJ%2FCwvTt8vjs2s9MHzI1hO-8d81f9e3-0b56-421e-a5da-121f9eb83de3_88mb%2BwbADj1MvtG9%2BiYMhVS43CRGBEVdn0v5QJsORviARUA3qR0iE9LBr7NpNrT7",
        "pubDate": "Fri, 29 Nov 2013 11:12:08 GMT",
        "title": "Long-shot legal challenges to health care law abound"
    }
    }]
}

AND finally here's what the error looks like at runtime

panic: interface conversion: interface is map[string]interface {}, not map[string][]interface {}

not really sure how i should go about this, so anyone with pre-existing knowledge of working with RESTful api's in golang that would have some insight would be greatly appreciated!

i ended up fixing it using some structures that matched the json objects... which was kind of a pain.

here it is if anyone ever wants to use this api in golang

type stories struct {
    Stories []story
}
type story struct {
    Description string
    Guid []guid
    Link string
    PubDate string
    Title string
}
type guid struct {
    IsPermalink string
    Value string
}

Apologies for the stupid comment earlier, the json you supplied was not valid so I validated the json payload and here is a working example of Unmarshalling + querying the map

byt := []byte(`{
    "stories": [
        {
            "description": "Despite the fact that shoppers descended upon stores after giving thanks, Black Friday wasn't without its share of brawls.",
            "guid": [
                {
                    "isPermalink": "true",
                    "value": "http://apidata.usatoday.com/story/news/nation-now/2013/11/29/black-friday-police-violence/3783467/?kjnd=Pvzhnh75%2BZ3dnzxHVv571HQOfzKReZECsSPCBGnAiXlbHijpqdc3TQoe4dYfzVlB-8d81f9e3-0b56-421e-a5da-121f9eb83de3_E50GPTZL1%2FYloJsxpxSnp8AhoO2O9prQtDTYiwN3sbV0SfQ5wriH1zooo6XgNPTr"
                }
            ],
            "link": "http://apidata.usatoday.com/story/news/nation-now/2013/11/29/black-friday-police-violence/3783467/?kjnd=LOCSg6KVoQR3pwnZyGmcgcDZXwce0MwglPkURuQ%2BzMkUdNzQ2GXJr%2FPfLCl4Hf38-8d81f9e3-0b56-421e-a5da-121f9eb83de3_Zp5d44u%2F3U2IkXWRbNP0OwyXjRkEgShxoJC0wp7%2FOJoFPCI979Zw4qgNkWkOG1x1",
            "pubDate": "Fri, 29 Nov 2013 02:57:43 GMT",
            "title": "Black Friday frenzy leads to reports of violence"
        },
        {
            "description": "President Obama's law faces hurdles beyond the Supreme Court case on the birth control mandate.",
            "guid": [
                {
                    "isPermalink": "true",
                    "value": "http://apidata.usatoday.com/story/news/politics/2013/11/29/supreme-court-obamacare-lawsuits-irs/3760811/?kjnd=sCqadf244XkWTNcS0zAI%2Ba25XsnxwAX3ahu8NP0bzKdU4Kx31rJsa0cWlhvnwMl8-8d81f9e3-0b56-421e-a5da-121f9eb83de3_wtrtyHNPao7CqrB0IR7%2Bj3GFwJMhSYFSrOrrGZCkX2BStipIyyDtQoTLLFCGoLj0"
                }
            ],
            "link": "http://apidata.usatoday.com/story/news/politics/2013/11/29/supreme-court-obamacare-lawsuits-irs/3760811/?kjnd=Be2GdDxc2cZdIOPiCpcL9vz%2FFvmT859xSGoVutxwurqJ%2FCwvTt8vjs2s9MHzI1hO-8d81f9e3-0b56-421e-a5da-121f9eb83de3_88mb%2BwbADj1MvtG9%2BiYMhVS43CRGBEVdn0v5QJsORviARUA3qR0iE9LBr7NpNrT7",
            "pubDate": "Fri, 29 Nov 2013 11:12:08 GMT",
            "title": "Long-shot legal challenges to health care law abound"
        }
    ]
}`)

    var dat map[string][]map[string]interface{}

    if err := json.Unmarshal(byt, &dat); err != nil {
        panic(err)
    }

    fmt.Println(dat["stories"][1]["description"])

The above example prints:

President Obama's law faces hurdles beyond the Supreme Court case on the birth control mandate.

Edit: added the same definition you have for map variable.

Edit 2: I've adjust the example to show higher levels of querying. Also this required a small change in the defined map.

just in case anyone was curious, this is what the final function for my app looked like using the structures i made:

func newsHandler(w *odie.ResponseWriter, req *odie.Request, vars odie.Context) {
    var count = vars.Get("numResults")
    if (count == "") {
        count = "10"
    }
    // get request to API
    resp, err := http.Get("http://api.usatoday.com/open/articles/topnews/home?count=" + count + "&days=0&page=0&encoding=json&api_key=myApiKey")

    if(err == nil){
        body, err := ioutil.ReadAll(resp.Body)
        if(err == nil) {
            var data stories
            err := json.Unmarshal(body, &data)

            if(err == nil) {
                for i:=0; i<len(data.Stories); i++ {
                    var article = data.Stories[i]

                    var link = strings.Split(article.Link,"apidata.")

                    fmt.Fprintf(w, "<h2>" + article.Title + "</h2>")
                    fmt.Fprintf(w, "<p>" + article.Description + "</p>")
                    if( len(link) > 1) {
                        fmt.Fprintf(w, "link to article: <a rel='nofollow' href=" + link[0] + link[1] + ">" + link[0] + link[1] + "</a><br/<br/>")
                    } else {
                        fmt.Fprintf(w, "link to article: <a rel='nofollow' href=" + link[0] + ">" + link[0] + "</a><br/<br/>")
                    }
                }           
            } else {
               fmt.Println(err)
            }

        } else {
            fmt.Println(err)
        }

    } else {
        fmt.Println(err)
    }
}