タイプが次のように定義されている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オブジェクトとしてエンコードされます。エクスポートされた各構造体フィールドはオブジェクトのメンバーになります
おそらく予想どおりに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
json
パッケージは、構造体のエクスポートされたフィールドのみをシリアル化できます。すべてのフィールドが大文字で始まるように構造体を変更して、出力に含めることができるようにします。
_type SpanInfo struct {
Imsi string
Network string
Network_status string
Signal_quality int
Slot int
State string
}
_
詳細および詳細については、 json.Marshal()
のドキュメントを参照してください。
これは新しい答えではありません。これは、受け入れられた回答に対するコメントの統合です。
元のクエリから
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"`
}