作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在 golang 中使用 json.unmarshalling 函数来解码我们从 API 获得的一些 JSON 响应。如何让它处理多种类型?
我们收到的响应总是状态码和消息,只是json字段有不同的名字。这两个字段有时称为code和message,有时称为statuscode和description,这取决于我们查询的内容。
假设我们查询 Apple,这可以通过创建一个 Apple 类型结构简单地解决,如下所示:
type Apple struct {
Code int `json:"code"`
Description string `json:"message"`
}
但是当我们查询Peach时,我们得到的json不再是code和message了,字段名变成了statuscode和description。所以我们需要以下内容:
type Peach struct {
Code int `json:"statuscode"`
Description string `json:"description"`
}
潜在地,我们需要再设置 50 种类型并重复写入 50 次??必须有更好的方法来做到这一点。不幸的是,我是 Golang 的新手,不知道多态性在这种语言中是如何工作的。请帮忙。
最佳答案
据我所知,您应该始终解码为结构以从 go static 类型、附加到该结构的方法中获益,并且也许能够使用像 validator 这样的包来验证您的响应。 ,但您始终可以将 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
}
关于go - 如何让 golang 中的解码函数处理多种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047941/
我是一名优秀的程序员,十分优秀!