Ищем идеи для экспорта структур чтения 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()
}
Детская площадка: 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 на этот уровень, чтобы он мог обрабатывать один рендер строки заголовка, а затем последующие строки данных.
@superenme обновил ответ, чтобы включить методы структуры для достижения желаемого результата для одной или нескольких записей.
Я нашел другой способ, так как у меня есть много корневых моделей, в качестве альтернативы я мог перебирать массив [] корневых моделей. Я могу перебирать массивы, а не структуры. Большое спасибо за ответ, это определенно помогает!
Это выглядит хорошо, если бы у меня был такой формат, но на самом деле мой формат находится в структуре. Я прочитал пакет csv и понимаю, что это может быть вывод в том случае, если у меня есть данные в ожидаемом формате, как показано в приведенном выше «ожидаемом выводе». Но все мои данные в формате структуры. {SomethingA SomethingB SomethingC {SomethingF SomethingG [1 2 3]}}, как мне отформатировать это в