登录
首页 >  Golang >  Go问答

发生什么情况会导致json.Unmarshall将数字转换为零?

来源:stackoverflow

时间:2024-02-13 22:36:24 358浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《发生什么情况会导致json.Unmarshall将数字转换为零?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

背景

我正在尝试分析来自 reddit api 的用户数据。我已经声明了一个 user struct ,如下所示:

type user struct {
    kind string `json:"kind"`
    data struct {
...
        subreddit  struct {
        ...
        } `json:"subreddit"`
...
        createdutc        float64     `json:"created_utc"` <---
...
    } `json:"data"`
}

我从 api 请求数据并在此处打印。

func GetUser(url string) User {
    var response User
    resp, err := http.Get(url)

    if err != nil {
        ...
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        ...
    }

    err = json.Unmarshal(body, &response)

    if err != nil {
        ...
    }

    fmt.Print(response.Data.CreatedUtc) <---

    return response
}

问题

当我请求此端点时,它会打印 0,而我可以在浏览器中看到 created_utc 时间戳是 1562538742。这似乎在绝大多数(但不是全部)情况下发生。

我的类型转换有问题吗?


解决方案


要理解为什么它为零,您必须首先了解在 Go 中,类型不会像其他语言那样自动引用。默认情况下,变量 var abc int 的值为 0

测试 JSON 是否正确解析时,可以将类型的值更改为指针。这样,任何未填充的字段都是 nil,而不是该类型的默认值。

这样做,您可以查看返回的值是否为 true,或者是否存在其他故障,例如数据模型不正确或网络调用失败。

今天关于《发生什么情况会导致json.Unmarshall将数字转换为零?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>