正在尝试解码来自 Youtube Api 个热门视频的数据 swift 获得 "Expected to decode Array<Any> but found a dictionary instead"
Trying to decode data from Youtube Api popular videos in swift getting "Expected to decode Array<Any> but found a dictionary instead"
我是 swift 的新手,我正在学习将数据从 Api 解析到我的 Swift 应用程序。
我试图从热门视频的 Youtube APi 获取数据 :(https://developers.google.com/youtube/v3/docs/videos/list) 但我无法获取数据,不知道我哪里出错了。但它给出了“预期解码数组但找到了字典。”
这是我的模型:
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]
}
我是 swift 的新手,我正在学习将数据从 Api 解析到我的 Swift 应用程序。 我试图从热门视频的 Youtube APi 获取数据 :(https://developers.google.com/youtube/v3/docs/videos/list) 但我无法获取数据,不知道我哪里出错了。但它给出了“预期解码数组但找到了字典。”
这是我的模型:
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]
}