JSON структура для CSV в Go Lang - PullRequest
0 голосов
/ 20 мая 2019

Поиск идей для экспорта структур чтения 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 */ 
} 

1 Ответ

1 голос
/ 20 мая 2019

Добавление метода в 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()
}

Детская площадка: 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, вы можете захотеть поместить логику модуля записи CSV на этот уровень - чтобы он мог обрабатыватьодиночный рендер строки заголовка, а затем последующих строк данных.

...