gpt4 book ai didi

json - 如何在 Go 中解码 JSON,它将多个元素作为类型数组返回,将单个元素作为类型返回

转载 作者:行者123 更新时间:2023-12-01 20:23:55 25 4
gpt4 key购买 nike

我正在使用一个发送 JSON 数据的 API。问题是单个元素的数组显示为单个值。例如,考虑以下 JSON:

{ "names": ["Alice","Bob"] }

API 将其作为数组发送。但是当 names字段有一个元素,API 发送这个:
{ "names": "Alice" }

这就是我通常在 Go 中解码这个响应的方式:

type Response struct {
Names []string `json:"names"`
}

// later

d := &Response{}
_ = json.NewDecoder(resp).Decode(d) // resp would be a http.Response.Body containing the problematic JSON

Go 正确解码了第一个 JSON。但是,在解码第二个 JSON 后,该对象包含一个空数组。

我对 API 没有任何控制权,所以我必须解决这个问题。如何在 Go 中正确解码此 JSON,以便 Names slice 包含单个元素?感谢您的帮助。

最佳答案

您可以实现 json.Unmarshaler 接口(interface)并让它检查 [ 的第 0 个原始字节或 "分别找出它是数组还是字符串:

type StringSlice []string

func (ss *StringSlice) UnmarshalJSON(data []byte) error {
if data[0] == '[' {
return json.Unmarshal(data, (*[]string)(ss))
} else if data[0] == '"' {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
*ss = append(*ss, s)
}
return nil
}

https://play.golang.com/p/2GEJsS2YOLJ

关于json - 如何在 Go 中解码 JSON,它将多个元素作为类型数组返回,将单个元素作为类型返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61837000/

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