0
XML API返回我试图解析从API的XML响应,并且当呼叫fmt.Println
并通过响应身体,我得到一个奇怪的字符串:转到:奇怪的编码字符串
&{0xc8200e6140 {0 0} false <nil> 0xc2030 0xc1fd0}
我已经确认我可以使用API并按预期得到XML。 (我也得到了相同的回应,发送GET
请求与Postman Chrome扩展。)这是一个编码问题?
下面是相关代码:
type Album struct {
Title string `xml:"album>name"`
Artist string `xml:"album>artist>name"`
PlayCount uint64 `xml:"album>playcount"`
}
const lastFMAPIKey string = "<My api key>"
const APIURL string = "http://ws.audioscrobbler.com/2.0/"
func perror(err error) {
if err != nil {
panic(err)
}
}
func getListeningInfo(url string) []byte {
resp, err := http.Get(url)
perror(err)
defer resp.Body.Close()
// this is the line that prints the string above
fmt.Println(resp.Body)
body, err2 := ioutil.ReadAll(resp.Body)
perror(err2)
return body
}
func main() {
url := APIURL + "?method=user.getTopAlbums&user=iamnicholascox&period=1month&limit=1&api_key=" + lastFMAPIKey
album := Album{}
err := xml.Unmarshal(getListeningInfo(url), &album)
perror(err)
fmt.Printf(album.Artist)
}
仅供参考,打印出resp
,而不是仅仅resp.Body
给出了这样的:
{200 OK 200 HTTP/1.1 1 1 map[Ntcoent-Length:[871]
Connection:[keep-alive] Access-Control-Max-Age:[86400]
Cache-Control:[private] Date:[Thu, 03 Dec 2015 05:16:34 GMT]
Content-Type:[text/xml; charset=UTF-8]
Access-Control-Request-Headers:[Origin, X-Atmosphere-tracking-id, X-Atmosphere-Framework, X-Cache-Date,
Content-Type, X-Atmosphere-Transport, *]
Access-Control-Allow-Methods:[POST, GET, OPTIONS]
Access-Control-Allow-Origin:[*]
Server:[openresty/1.7.7.2]]
0xc8200f6040 -1 [] false map[] 0xc8200b8000 <nil>}
谢谢!这让我如预期的XML。但是,即使'xml.Unmarshal'采用'[]字节',当我通过它时,它似乎没有用数据('main'的最后一行)填充'Album'结构。有什么想法吗? – nickcoxdotme
我也双重和三重检查了XML结构。 – nickcoxdotme
您可以将XML添加到您的原始问题吗?很难帮助排除故障,如果我们不知道xml解析器的输入 –