从 AlamoFire 导入 JSON 数据后创建数组

Posted

技术标签:

【中文标题】从 AlamoFire 导入 JSON 数据后创建数组【英文标题】:Create Array after importing JSON data from AlamoFire 【发布时间】:2018-10-25 08:40:31 【问题描述】:

我正在进行 API 调用,但响应正常返回。这是一组 youtube 链接:

"items": [
  
   "kind": "youtube#playlistItem",
   "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/1GDmRHbln92JxGtet7SSiPs9SaY\"",
   "id": "UEw1dHZnblY0RmtqMHdpeFZ0bmNLZklqMEZuZEZmRUpYdS41NkI0NEY2RDEwNTU3Q0M2",
   "snippet": 
    "publishedAt": "2018-10-17T22:37:35.000Z",
    "channelId": "UCf-gdftRGql5XOUd_ZpVnZg",
    "title": "A Republican, Democrat, and Independent Drink Together | Strange Brew | ",
url:www.test url

    
    
    ]

这是加载视频的功能:

视频类:UIViewController、UITableViewDelegate、UITableViewDataSource

var video = [LicenseDetails]()
let recVideos = NSURL(string: RecVideos)





func loadVideos() 
Helpers.showActivityIndicator(activityIndicator, view)

APIManager.shared.recVideos  json in
        if json != nil 
            self.video = []

            print("Lookin In", json)

//            Adds all items into the array list dist then goes through them all.
            if let listDis = json["items"].array 
                print("Looking For Items", listDis)

                for item in listDis 

                    let Video = LicenseDetails(json: item)
                    self.video.append(Video)
                    print("Test: ", self.video)

                

                Helpers.hideActivityIndicator(self.activityIndicator)

            
            
        
    

我正在尝试解析通过 LicenseDetail 类传入的数据

class LicenseDetails 

    var title: String?
    var url: String?
    var videoId: String?



    init(json: JSON) 

        self.title = json["title"].string
        self.videoId = json["resourceId"]["videoId"].string

    

我不明白为什么我不能用 JSON 信息中的数据填充我的 listDis 数组,然后用我的 LicenseDetail(json:json) 方法对其进行解析。请帮忙。

【问题讨论】:

您是否遇到了错误? 【参考方案1】:

首先确保初始化所有存储的属性。而且您需要将 Json 数据转换为字符串。我使用了 Swift 的铸造方式。用 amofire 或者是你写的或者像这样的self.title = json["title"].stringValue

struct LicenseDetails 
    var title: String
    var url: String
    var videoId: String

    init(json: JSON) 
        self.title = json["title"] as! String
        self.url = json["title"] as! String
        self.videoId = json["videoId"] as! String
    

接下来,只将 JSON 获取部分留给 loadVideos() 函数,并将其余部分移至 ViewController 并为它设置一个初始化,如下所示:

class Video: UIViewController, UITableViewDelegate, UITableViewDataSource 
    var videos = [LicenseDetails]()
    required init(json: JSON) throws 
        super.init()
        let listDis = json["items"].array
        self.videos = listDist.mapLicenseDetails(json:$0)
    

就是这样。希望它有效。

【讨论】:

我无法让它工作。我已将所有其他内容移至视图控制器,但出现此错误:在调用“super.init”之前使用了“self” 另外,我认为我遗漏了一些声明。请看一下我更新的代码。 你能分享一个 git 隔离问题以便我自己解决吗? 我已经更新了我的代码以准确显示它在我的 git 中的内容。我认为问题在于您认为变量 var videos = [Video]() 而不是 video = [LicenseData]() 没有。这就是问题所在。

以上是关于从 AlamoFire 导入 JSON 数据后创建数组的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 响应创建字符串数组 Alamofire

如何使用 Alamofire 和 SwiftyJSON 正确创建一个类来保存来自 JSON 的数据

Alamofire JSON 请求未从服务器中提取数据

如何将 json 数据从 alamofire 转换为 swift 对象

使用 Swift Alamofire 从 SOAP 中提取 JSON 数据

如何从 alamofire 中的 json 数组中获取对象?