我正在使用一个 API,如果它为零,它可以返回一个值,如果它不为零,则返回一个字符串,我想要一个解码器,它将这两个 JSON 正确解码为结构
{
"id": 1,
"rating": 0
}
{
"id": 2,
"rating": "2"
}
type User struct {
Id int64 `json:"id"`
Rating int64 `json:"rating,string"`
}
因此它应该尝试将任何 JSON 类型(int、float、string)转换为 struct 中指定的类型,并仅在不可能时引发错误。标准 json.Decoder 不会那样做。
或者也许有一些更可定制的json解析库?
最佳答案
您正在尝试从 JSON 字符串解析 int64
。您可以使用实现 JSON Unmarshaler 接口(interface)的自定义类型来执行此操作。
例如
type User struct {
Id int64 `json:"id"`
Rating Int64String `json:"rating"`
}
type Int64String int64
func (i Int64String) MarshalJSON() ([]byte, error) {
return json.Marshal(strconv.FormatInt(int64(i), 10))
}
func (i *Int64String) UnmarshalJSON(data []byte) error {
var jstring string
err := json.Unmarshal(data, &jstring)
if err != nil {
return err
}
*(*int64)(i), err = strconv.ParseInt(jstring, 0, 64)
return err
}
关于json - 有没有一种方法可以通过转换类型在 Go 中解码 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682521/