Go Lang 中的 JSON 结构到 csv

标签 json csv go struct

寻找在保留层次结构的同时将 JSON 读取结构导出为某种 csv 格式的想法。

https://play.golang.org/p/jf2DRL1hC5K

/* 
Expected output in excel for data wrangling: 
A Key       | B Key     | C Key     | D Key
SomethingA    SomethingB      SomethingC      SomethingF 
SomethingA    SomethingB      SomethingC      SomethingG
SomethingA    SomethingB      SomethingC      [1,2,3]   
*/

我试过如下遍历结构

for _, value := range mymodel { 
   fmt.Println(value) 

/* could not iterate over structs */ 
} 

最佳答案

为标题和单独的行添加一个方法到您的 RootModel(这样您就可以遍历类型并且只打印一次标题):

type RootModel struct {
        A string
        B string
        C string
        D factors
}

type factors struct {
        F string
        G string
        H []int
}

func (*RootModel) CSVheader(w io.Writer) {
        cw := csv.NewWriter(w)
        cw.Write([]string{"A Key", "B Key", "C Key", "D Key"})
        cw.Flush()
}

func (rm *RootModel) CSVrow(w io.Writer) {
        cw := csv.NewWriter(w)
        cw.Write([]string{rm.A, rm.B, rm.C, rm.D.F})
        cw.Write([]string{rm.A, rm.B, rm.C, rm.D.G})

        is, _ := json.Marshal(rm.D.H)
        cw.Write([]string{rm.A, rm.B, rm.C, string(is)})
        cw.Flush()
}

Playground :https://play.golang.org/p/c8UQVQ8tQTX

输出:

A Key,B Key,C Key,D Key
SomethingA,SomethingB,SomethingC,SomethingF
SomethingA,SomethingB,SomethingC,SomethingG
SomethingA,SomethingB,SomethingC,"[1,2,3]"

注意:如果您正在处理 RootModel 的 slice ,您可能希望将 CSV 编写器逻辑放在该级别 - 这样它就可以处理单个渲染标题行,然后是后续数据行。

关于Go Lang 中的 JSON 结构到 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56226275/

相关文章:

python - 如何在 .csv 文件中转义字符串 Python 2.7 中的逗号

javascript - d3 将对象转换为数组

go - 从 rabbitmq 获取已发布消息的响应。戈朗

java - Spring REST多个@RequestBody参数,可能吗?

javascript - .NET 日期和 JSON

csv - 将 Yahoo Pipe 导出为 CSV?

unit-testing - 仅使用 golang 中的标准库断言特定错误

python - 将巨大的 JSON 文件流式解析为小文件

javascript - 从 JSON 返回数组中获取平均值或第一个

go - 使用 `go doc` 命令查看示例函数?