将JSON解组为具有“嵌入”键的结构

时间:2016-09-04 17:00:01

标签: json go

我有这个JSON:

{
  id : "12345",
  videos: {
    results: [
      {
        id: "533ec655c3a3685448000505",
        key: "cYyx5DwWu0k"
      }
    ]
  }
}

我想把它解组为这个结构:

type Film struct {
    ID          int     `json:"id"`
    Videos      []Video `json:"videos"`
}

type Video struct {
    ID   string  `json:"id"`
    Key  string  `json:"key"`
}

我的意思是,我希望Videos struct field为videos.results数组。

如果我这样做:

body := //retrieve json above
var film Film
json.Unmarshal(body, &film)

显然无法正常工作,因为它无法将videos json键解组为Video数组,因为results键。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以为Film定义一个unmarshaller,"解包"嵌套的JSON结构。例如:

func (f *Film) UnmarshalJSON(b []byte) error {
    internal := struct {
        ID     int `json:"id"`
        Videos struct {
            Results []Video `json:"results"`
        } `json:"videos"`
    }{}

    if err := json.Unmarshal(b, &internal); err != nil {
        return err
    }
    f.ID = internal.ID
    f.Videos = internal.Videos.Results
    return nil
}

https://play.golang.org/p/rEiKqLYB-1