Golang 和 JSON 结构数组
Golang and JSON with array of struct
我想创建一个 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
。
json
包只能序列化结构的导出字段。更改您的结构以使用大写字母开头所有字段,以便它们可以包含在输出中:
type SpanInfo struct {
Imsi string
Network string
Network_status string
Signal_quality int
Slot int
State string
}
阅读 json.Marshal()
的文档了解详情和更多信息。
您的结构字段必须被导出(如果字段以大写字母开头则被导出)否则它们将不会被编码:
Struct values encode as JSON objects. Each exported struct field
becomes a member of the object
要获得可能预期的 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
This is not a new answer. It is just consolidation of comments on the
accepted answer.
来自原始查询
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"`
}
我想创建一个 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
。
json
包只能序列化结构的导出字段。更改您的结构以使用大写字母开头所有字段,以便它们可以包含在输出中:
type SpanInfo struct {
Imsi string
Network string
Network_status string
Signal_quality int
Slot int
State string
}
阅读 json.Marshal()
的文档了解详情和更多信息。
您的结构字段必须被导出(如果字段以大写字母开头则被导出)否则它们将不会被编码:
Struct values encode as JSON objects. Each exported struct field becomes a member of the object
要获得可能预期的 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
This is not a new answer. It is just consolidation of comments on the accepted answer.
来自原始查询
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"`
}