我使用从Youtube API收到的数据将Youtube json响应解组为Go结构,如下所示: -
{
"kind": "youtube#searchListResponse",
"etag": "\"5g01s4-wS2b4VpScndqCYc5Y-8k/5xHRkUxevhiDF1huCnKw2ybduyo\"",
"nextPageToken": "CBQQAA",
"regionCode": "TH",
"pageInfo": {
"totalResults": 36,
"resultsPerPage": 20
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "\"5g01s4-wS2b4VpScndqCYc5Y-8k/aMbszoNudZchce3BIjZC_YemugE\"",
"id": {
"kind": "youtube#video",
"videoId": "fvh6CQ7FxZE"
},
"snippet": {
"publishedAt": "2016-07-16T14:42:36.000Z",
"channelId": "UCuX4iswo8acMxDNcbrceRYQ",
"title": "Japan อร่อยสุดๆ:การประชันของ 2 สาวกับราเมงดังจากโอซาก้า#ramen",
"description": "Ramen Kio ราเมนชื่อดังของโอซาก้าอัดแน่นด้วยเนื้อหมูชาชูแบบเต็มๆเส้นเหนีย...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/fvh6CQ7FxZE/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/fvh6CQ7FxZE/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/fvh6CQ7FxZE/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "Japan aroi sudsud TV",
"liveBroadcastContent": "none"
}
}
]
}
为此,我在Go
中为此创建了一个结构type YoutubeData struct {
Kind string `json:"kind"`
Etag string `json:"etag"`
NextPageToken string `json:"nextPageToken"`
RegionCode string `json:"regionCode"`
PageInfo struct {
TotalResults string `json:"totalResults"`
ResultsPerPage string `json:"resultsPerPage"`
} `json:"pageInfo"`
Items []struct {
Kind string `json:"kind"`
Etag string `json:"etag"`
Id struct {
Kind string `json:"kind"`
VideoId string `json:"videoId"`
} `json:"id"`
Snippet struct {
PublishedAt string `json:"publishedAt"`
ChannelId string `json:"channelId"`
Title string `json:"title"`
Description string `json:"description"`
Thumbnails struct {
Default struct {
Url string `json:"url"`
Width string `json:"width"`
Height string `json:"height"`
} `json:"default"`
Medium struct {
Url string `json:"url"`
Width string `json:"width"`
Height string `json:"height"`
} `json:"medium"`
High struct {
Url string `json:"url"`
Width string `json:"width"`
Height string `json:"height"`
} `json:"high"`
} `json:"thumbnails"`
ChannelTitle string `json:"channelTitle"`
LiveBroadcastContent string `json:"liveBroadcastContent"`
} `json:"snippet"`
} `json:"items"`
}
我使用此方法解组了它
youtubeData := YoutubeData{}
if json.Unmarshal(b, &youtubeData); err != nil {
} else {
}
其中b是从Youtube API接收的字节数据。当我将其打印到我的控制台时,我成功地获取了字节对象中的所有数据,但是,一旦我解组它并尝试使用{{。}}在模板上输出它,我收到了
{youtube#searchListResponse "5g01s4-wS2b4VpScndqCYc5Y-8k/JwGY0TWwWswjZ9LOvemaF5yxsMo" CBQQAA TH { } []}
除了json对象和数组中的数据 pageInfo 和 items 之外,所有数据都是未编组的。根本就是空白。我相信我正确地导出了它们。当谈到json unmarshalling时,还有一些额外的步骤可以将数据放入切片或结构嵌套在Go中的另一个结构中吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
请注意,json数据包含TotalResults
和ResultsPerPage
的数字。您可以尝试按如下方式解码这些:
PageInfo struct {
TotalResults json.Number `json:"totalResults"`
ResultsPerPage json.Number `json:"resultsPerPage"`
} `json:"pageInfo"`
获得unmarshalled结构后,您可以将数字设为:
totalResults, _ := youtubeData.PageInfo.TotalResults.Int64()
答案 2 :(得分:1)
您的结构必须包含JSON正文所具有的相同数据类型的字段,在您的JSON正文中success-1
和totalResults
是整数,所以:
resultsPerPage