У меня есть набор данных, который приходит из запроса API, который получает json.Unmarshal()
в структуре. После того, как сделано с данными. затем его необходимо экспортировать с разными именами ключей.
У меня пока есть это. Пока это работает, я просто хочу посмотреть, есть ли лучший способ.
Структура, используемая для анализа входящего API
type Bars struct {
Link string `json:"bar_link"`
Name string `json:"name"`
}
type Foos struct {
Foo string `json:"foo"`
Bar []Bars `json:"bars"`
}
type Opts struct {
Something string `json:"something"`
}
type Test struct {
ID string `json:"id"`
Name string `json:"name_from_api"`
StringDesc []string `json:"name_from_api_one"`
NumberField int `json:"name_from_api_two"`
Foo []Foos `json:"foos"`
Opts Opts `json:"option_stuff"`
}
Анализ входящих данных с помощью приведенной выше структуры.
var test Test
json.Unmarshal(data, &test)
return test
Изменение вывода с другой структурой, включая изменение некоторых из ключи:
type Bars struct {
Link string `json:"different_name_of_link_key"`
Name string `json:"name"`
}
type Foos struct {
Foo string `json:"different_foo_name"`
Bar []Bars `json:"bars"`
}
type Opts struct {
Something string `json:"something"`
}
type Test struct {
ID string `json:"id"`
Name string `json:"different_name"`
StringDesc []string `json:"different_name_two"`
NumberField int `json:"different_name_three"`
Foo []Foos `json:"foos"`
Opts Opts `json:"option_stuff"`
}
// test is "test" returned in the above unmarshal
var foos []Foos
for _, i := range test.Foo {
var f []Bars
for _, b := range i.Bar {
f = append(f, Bars(b))
}
foos = append(foos, Foos{
Foo: i.Foo,
Bar: f,
})
}
return {
ID: test.ID,
Name: test.Name,
StringDesc: test.StringDesc,
NumberField: test.NumberField,
Foo: foos,
Opts: Opts(test.Opts),
}
Вот последняя игровая площадка: https://play.golang.org/p/yoHfzmHfxKp
Обновление: Используется тип конвертации для баров.