вложенные структуры от json, разбитые на структуры - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть набор данных, который приходит из запроса 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


Обновление: Используется тип конвертации для баров.

1 Ответ

0 голосов
/ 12 февраля 2020

Если вы не изменяете данные, вы можете сделать строку или, если вы sh замените регулярное выражение, вашей первоначальной строки, которую вы получили. Если вы изменяете данные, выполняйте маршалирование и выполняйте замену строк / регулярных выражений, чтобы вам не пришлось поддерживать несколько дополнительных структур. Я, однако, не знаю о снижении производительности, если таковые имеются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...