我在golang中使用json.unmarshalling函数来解码从API获得的一些JSON响应。如何使其处理多种类型?
我们收到的响应始终是状态码和消息,但是json字段具有不同的名称。有时这两个字段称为代码和消息,有时又称为状态代码和描述,具体取决于我们查询的内容。
说我们查询Apple,这可以通过创建如下的Apple类型结构来解决:
type Apple struct {
Code int `json:"code"`
Description string `json:"message"`
}
但是当我们查询Peach时,我们返回的json不再是代码和消息了,字段名称变为statuscode和description。因此,我们将需要以下内容:
type Peach struct {
Code int `json:"statuscode"`
Description string `json:"description"`
}
潜在地,我们需要设置50种以上的类型并重复50次?必须有更好的方法来做到这一点。不幸的是,我是Golang的新手,也不知道多态在这种语言中是如何工作的。请帮忙。
答案 0 :(得分:0)
据我所知,您应该始终解码为结构,以受益于go静态类型,该结构所附带的方法,并且也许能够使用{{3 }},但是您总是可以将JSON主体解析成这样的映射:
// JsonParse parses the json body of http request
func JsonParse(r *http.Request) (map[string]interface{}, error) {
// Read the r.body into a byte array
body, err := ioutil.ReadAll(r.Body)
if err != nil {
return nil, err
}
// Make a map of String keys and Interface Values
b := make(map[string]interface{})
// Unmarshal the body array into the map
err = json.Unmarshal(body, &b)
if err != nil {
return nil, err
}
return b, nil
}