Можно ли распаковать вложенные json в плоскую структуру? - PullRequest
0 голосов
/ 21 февраля 2020

В Go можно ли разархивировать вложенную json в другую структурированную структуру? например, выровнять вложенность.

{
  "id":1,
  "person":{
    "name": "Jack"
    "extra": {
      "age": 21
    }
  }
}
type Item struct {
  ID int64 `json:"id"`
  Name string `json:"name"`
  Age string `json:"age"`
}

1 Ответ

1 голос
/ 21 февраля 2020

Вы можете реализовать интерфейс json.Unmarshaler.

func (i *Item) UnmarshalJSON(data []byte) error {
    var temp struct {
        ID     int64 `json:"id"`
        Person struct {
            Name  string `json:"name"`
            Extra struct {
                Age int `json:"age"`
            } `json:"extra"`
        } `json:"person"`
    }
    if err := json.Unmarshal(data, &temp); err != nil {
        return err
    }
    i.ID = temp.ID
    i.Name = temp.Person.Name
    i.Age = strconv.Itoa(temp.Person.Extra.Age)
    return nil
}

https://play.golang.com/p/nRGw8ovo7vr

...