微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图迅速从Youtube Api流行视频中解码数据,并“希望解码Array <Any>但找到字典”

如何解决试图迅速从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&regionCode=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 举报,一经查实,本站将立刻删除。