登录
首页 >  Golang >  Go问答

json.Decode 不解码数字

来源:stackoverflow

时间:2024-04-10 12:42:34 414浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《json.Decode 不解码数字》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我基本上是从 json 包的文档中复制粘贴了这段代码。在提供的示例中,json 对象的值是字符串。在这里,我尝试使用整数代替。

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "log"
    "strings"
)

func main() {
    const jsonStream = `{"serverTime":35678}`

    type Message struct {
        serverTime int
    }
    
    dec := json.NewDecoder(strings.NewReader(jsonStream))
    for {
        var m Message
        if err := dec.Decode(&m); err == io.EOF {
            break
        } else if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("its %v o clock\n", m.serverTime)
    }
}

m.servertime 现在应该是 35678,但是,它只是 0。我做错了什么?


解决方案


document 所描述

json 包仅访问结构类型的导出字段(以大写字母开头的字段)。因此,只有结构体的导出字段才会出现在 json 输出中。

因此将 servertime 更改为 servertime,并添加 json 标签 json:"servertime"

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "log"
    "strings"
)

func main() {
    const jsonStream = `{"serverTime":35678}`

    type Message struct {
        ServerTime int `json:"serverTime"`
    }

    dec := json.NewDecoder(strings.NewReader(jsonStream))
    for {
        var m Message
        if err := dec.Decode(&m); err == io.EOF {
            break
        } else if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("its %v o clock\n", m.ServerTime)
    }
}

今天关于《json.Decode 不解码数字》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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