我正在从服务器读取API(JSON)响应,并且应该获取(如果状态为200 ok)以下响应。
// If I sent a wrong data ..
{
error: "some value",
message: "... description of the error"
}
或
// if all is good
{
events: [{key1: 1}, {key2: "two"} ... ]
}
因为我不确定响应的类型。
我将响应解码为map[string]interface{}
。
resp := make(map[string]interface{}, 0)
json.NewDecoder(response.Body).Decode(&resp)
稍后在代码流中,我到达了一个阶段,在这个阶段,我知道响应是一个很好的响应。我需要将interface{}
转换回[]map[string]interface{}
。
但是我认为这不起作用..
// This does not work I guess.
// events := resp["events"].([]map[string]interface{})
我设法做到这一点的唯一理智的方法是使用。
interFace := resp["events"].([]interface{})
for mapInterface := range interFace {
row := MapInterface.(map[string]interface{})
// now use the row hence forth
}
这可以通过任何其他方式或任何其他方法 1 来完成,这些方法可以避免在循环内部进行强制转换。
1:也许在这里创建Response结构是可行的。但我真的很想听听其他可以尝试使用struct
方法的其他方法。
答案 0 :(得分:1)
您可以定义一个在结构中同时具有错误值和非错误值的结构。
type Response struct {
ErrorMessage string `json:"message"`
Error string `json:"error"`
Events []map[string]interface{} `json:"events"`
}