gpt4 book ai didi

go - 如何让 golang 中的解码函数处理多种类型?

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:12 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com