我有这个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
键。
我该怎么做?
答案 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
}