带有结构数组的 Golang 和 JSON

我想创建一个GatewayInfo类型定义如下的 JSON :


type SpanInfo struct {

    imsi string

    network string

    network_status string

    signal_quality int

    slot int

    state string

}


type GatewayInfo []SpanInfo

网关信息是通过以下方式创建的:


var gatewayInfo = make(GatewayInfo, nb_spans)

要创建 JSON,我使用以下json.Marshal函数:


gatewayInfo := getGatewayInfo(spans)

log.Printf("Polling content: %s\n", gatewayInfo)


jsonInfo, _ := json.Marshal(gatewayInfo)

log.Printf("jsonInfo: %s\n", jsonInfo)

不幸的是,结果不是我所期望的:


2015/02/09 13:48:26 Polling content: [{652020105829193 20801 Registered (Roaming) %!s(int=17) %!s(int=2) } {652020105829194 20801 Registered (Roaming) %!s(int=16) %!s(int=3) } {652020105829192 20801 Registered (Roaming) %!s(int=19) %!s(int=1) } {652020105829197 20801 Registered (Roaming) %!s(int=19) %!s(int=4) }]

2015/02/09 13:48:26 jsonInfo: [{},{},{},{}]

正如我们所看到的,GatewayInfo实例有SpanInfo,但在 JSON 中我有空SpanInfo。


Smart猫小萌
浏览 199回答 3
3回答

拉莫斯之舞

您的结构字段必须导出(如果以大写字母开头,则导出字段),否则它们不会被编码:结构值编码为 JSON 对象。每个导出的 struct 字段都成为对象的成员要按预期获得 JSON 表示,请将代码更改为:type SpanInfo struct {    IMSI string `json:"imsi"`    Network string `json:"network"`    NetworkStatus string `json:"network_status"`    SignalQuality int `json:"signal_quality"`    Slot int `json:slot"`    State string `json:"state"`}type GatewayInfo []SpanInfo

哔哔one

该json包只能序列化结构的导出字段。更改您的结构,以大写字母开头所有字段,以便它们可以包含在输出中:type SpanInfo struct {    Imsi string    Network string    Network_status string    Signal_quality int    Slot int    State string}

白板的微信

这不是一个新的答案。这只是对已接受答案的评论的合并。来自原始查询type SpanInfo struct {    imsi string    network string    network_status string    signal_quality int    slot int    state string}来自答案和评论 - 请注意,结构中每个字段的第一个字符现在是大写,并且每个字段都添加了 json 表示type SpanInfo struct {    IMSI string `json:"imsi"`    Network string `json:"network"`    NetworkStatus string `json:"network_status"`    SignalQuality int `json:"signal_quality"`    Slot int `json:slot"`    State string `json:"state"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go