将结构数组转换为字符串数组以显示为表格

Posted

技术标签:

【中文标题】将结构数组转换为字符串数组以显示为表格【英文标题】:Transform array of struct into array of strings to display as a table 【发布时间】:2019-08-07 13:12:00 【问题描述】:

我在看以下包:https://github.com/olekukonko/tablewriter

我想尝试将我的结构打印为类似的东西,但我无法将我的结构数组转换为包需要的字符串数组。

所以我尝试了类似的方法:

func print(quakes []Quake) 
    var data [][]string

    for _, quake := range quakes 
        b, err := json.Marshal(quake)
        append(data, []string(b))
    

    table := tablewriter.NewWriter(os.Stdout)
    table.SetHeader([]string"Name", "Sign", "Rating")

    for _, v := range newData 
        table.Append(v)
    
    table.Render() // Send output

我的地震结构:

type Quake struct 
    Googlemapref string `json:"googlemapref"`
    Segree       string `json: "degree"`
    DataUpdate   string `json: "dataUpdate"`
    MagType      string `json:"magType"`
    ObsRegion    string `json: "obsRegion"`
    Lon          string `json:"lon"`
    Source       string `json: "source"`
    Depth        int    `json:"depth"`
    TensorRef    string `json:"tensorRef"`
    Sensed       string `json:"sensed"`
    Shakemapid   string `json:"shakemapid"`
    Time         string `json:"time"`
    Lat          string `json:"lat"`
    Shakemapref  string `json:"shakemapref"`
    Local        string `json:"local"`
    Magnitud     string `json: "magnitud"`

由于我是语言新手,非常感谢您的帮助,非常感谢

【问题讨论】:

【参考方案1】:

您的代码存在一些问题。首先,append 函数没有附加在适当的位置,所以在你执行 append(data, []string(b)) 的地方结果被丢弃了,所以我认为你想改为执行 data = append(data, []string(b))

此外,在结构上执行json.Marshal 不会生成您尝试使用它的字符串切片。相反,它将生成一个包含所有值的单个字符串,例如"googlemapref":"something","depth":10。您要使用的表格编写器需要将一部分值放入与标题匹配的表中(您似乎使用"Name", "Sign", "Rating" 的示例标题。

可以使用reflect 包(如json)来填充每一行中的字段,但我认为这会比它的价值更复杂,你最好只填写每个通过调用相关字段来行:

func print(quakes []Quake) 
    var data [][]string

    for _, quake := range quakes 
        row := []stringquake.Googlemapref, quake.Segree, strconv.Itoa(quake.Depth),...
        data = append(data, row)
    

    table := tablewriter.NewWriter(os.Stdout)
    table.SetHeader([]string"googlemapref", "degree", "depth",...)

    for _, v := range newData 
        table.Append(v)
    
    table.Render() // Send output

(我留下了... 供您自己填写其他字段,但包含深度以显示如何将其转换为字符串)。

【讨论】:

以上是关于将结构数组转换为字符串数组以显示为表格的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串数组转换为结构数组?

如何将数组转换成JSON-CSDN论坛

创建 Java 实用函数以将无符号字符数组转换为字符串

将字符串数组数组转换为分层结构

在 Bigquery 中,如何将结构的字符串化数组转换为正确的数组?

使用字符串(不是HTML)以表格格式显示对象数组。