带有struct数组的Golang和JSON

时间:2015-02-09 13:56:15

标签: json go 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

3 个答案:

答案 0 :(得分:23)

您的结构字段必须导出(如果字母以大写字母开头,则导出字段)或者不会对其进行编码:

  

Struct值编码为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

答案 1 :(得分:6)

json包只能序列化结构的导出字段。更改结构以使用大写字母开始所有字段,以便它们可以包含在输出中:

type SpanInfo struct {
    Imsi string
    Network string
    Network_status string
    Signal_quality int
    Slot int
    State string
}

阅读json.Marshal()的文档以获取详细信息和更多信息。

答案 2 :(得分:0)


  

这不是一个新答案。这只是对   接受的答案。


来自原始查询

# Get the data
df = pd.read_excel('testExcel.xlsx',
                   sheet_name='Hoja1',
                   na_values='NA',
                   skiprows=2)

# Remove empty rows
df = df.dropna(axis='columns', how='all')

# Fill down the 'Name' values
df['Name'] = df['Name'].fillna(method='ffill')

# Define an aggregate function
def join_values(series):
    return ', '.join(pd.Series.dropna(series))

# Group and aggregate the data using the defined function
df = df.groupby(by='Name').aggregate(join_values)

# Reset multi index
df = df.reset_index()

# Serialize
json_output = df.to_json(orient='records')

从答案和评论中开始-请注意,结构中每个字段的第一个字符现在都为大写,并且已将json表示形式添加到每个字段中

type SpanInfo struct {
    imsi string
    network string
    network_status string
    signal_quality int
    slot int
    state string
}