json - 有没有办法通过转换类型在 Go 中解码 JSON?
问题描述
我正在使用一个 API,如果它为零,它可以返回一个值作为 int,如果它不为零,则返回一个字符串,我想要一个解码器,它将这两个 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 解析库?
解决方案
您正在尝试int64
从 JSON 字符串中解析一个。您可以使用实现 JSON Unmarshaler 接口的自定义类型来执行此操作。
例如
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
}
推荐阅读
- java - 无论凭据是什么,都在登录页面上循环
- angular - Angular Universal 启用了 initialNavigation 并且 CanActivateChild 返回 false 没有响应
- c# - 集成测试期间的 API 端点错误但不是正常启动
- reactjs - 在 React 中使用 MUI 重置其他组件 onClick 的状态
- linux - 脚本从命令行正确运行,但未嵌入到另一个脚本中
- php - 数据库插入后 HTTP 303 重定向
- excel - 带有输入的 VBA VlookUp 无法获取结果,是代码错误还是数据类型不匹配?
- c# - 如何在 ASP.NET Core 依赖注入中注册具体类的字符串依赖?
- google-analytics - 如何更新谷歌分析中的交易?
- javascript - 有没有办法在网页中显示 cookie?