如何解决试图迅速从Youtube Api流行视频中解码数据,并“希望解码Array <Any>但找到字典”
我是Swift的新手,并且正在学习将Api的数据解析到我的Swift Apps的过程。 我试图从热门视频:(https://developers.google.com/youtube/v3/docs/videos/list)的Youtube APi中获取数据,但是我无法获取数据,也不知道我哪里出了问题。但是它给出了“希望对Array进行解码但是找到了一个字典”。
这是我的模特:
struct Items: Codable {
let kid : String
}
struct PopularVideos: Codable,Identifiable {
let id: String?
let kind : String
let items : [Items]
}
我的Api请求方法:
//Getting Api calls for youtube video
func getYoutubeVideo(){
let url = URL(string: "https://www.googleapis.com/youtube/v3/videos?part=snippet&chart=mostPopular®ionCode=US&key=\(self.apiKey)")!
URLSession.shared.dataTask(with: url){(data,response,error) in
do {
let tempYTVideos = try JSONDecoder().decode([PopularVideos].self,from: data!)
print(tempYTVideos)
dispatchQueue.main.async {
self.YTVideosDetails = tempYTVideos
}
}
catch {
print("There was an error finding data \( error)")
}
} .resume()
}
解决方法
该API调用返回的根对象不是数组。这是一个简单的对象,其中包含Item
的数组。
所以,你想要
let tempYTVideos = try JSONDecoder().decode(PopularVideos.self,from: data!)
此外,您的数据结构看起来不正确;根对象中没有id
属性,该项目中没有kid
属性。一个项目具有一个kind
和一个id
。
我还建议您将结构命名为Item
而不是Items
,因为它代表单个项目;
struct Item: Codable,Identifiable {
let kind: String
let id: String
}
struct PopularVideos: Codable {
let kind : String
let items : [Item]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。