如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON

Posted

技术标签:

【中文标题】如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON【英文标题】:How to correctly parse JSON with Alamofire and SwiftyJSON 【发布时间】:2019-02-16 13:18:44 【问题描述】:

我的目标是在这个 JSON data 上获得最顶部的“browser_download_url”字段,以便我可以使用它在 Github 上找到最新版本的应用程序。

我目前正在使用 Swift 4.2 和 Alamofire 来获取网络数据,并使用 SwiftyJSON 来解析数据。


我从一个测试开始,以便掌握它的窍门,首先使用这个simple JSON data。

这是我的代码

    Alamofire.request("https://jsonplaceholder.typicode.com/todos").responseJSON  (responseData) -> Void in
        if((responseData.result.value) != nil) 
            let swiftyJsonVar = JSON(responseData.result.value!)
            if let test = swiftyJsonVar[0]["title"].string 
                print(test)

运行代码会将test 打印为delectus aut autem,这在JSON 数据中是正确的。


虽然我尝试将代码用于我的原始目标,如下所示

    Alamofire.request("https://api.github.com/repos/s0uthwest/futurerestore/releases/latest").responseJSON  (responseData) -> Void in
        if((responseData.result.value) != nil) 
            let swiftyJsonVar = JSON(responseData.result.value!)
          //  print(swiftyJsonVar)
            if let test = swiftyJsonVar[0]["assets"]["browser_download_url"].string 
                print(test)

虽然运行代码没有任何结果。我确定这是我尝试获取browser_download_url 的方式有问题,所以我不确定如何继续。

【问题讨论】:

你使用 Swift 4.2 吗?那么答案是:不要使用 SwiftyJSON。改用 Codable 我想我会使用 SwiftyJSON,因为它看起来更容易。虽然我会研究如何使用 Codable 的内置功能。 其实用 Codable 要容易得多 @HaMza 这是怎么回事?我回答了你的问题。 【参考方案1】:

Codable 超级简单。

    创建struct

    struct Item: Codable 
        let userId: Int
        let id: Int
        let title: String
        let completed: Bool
    
    

    在 Alamofire 完成处理程序中,您只需对其进行解码,如下所示:

    let decoder = JSONDecoder()
    
    do 
        // don't force unwrap in your project
        var yourStructs = try decoder.decode([Item].self, from: data!)
        print("yourStructs contains \(String(yourStructs.count)) items")
     catch 
        print("kaboom!", error)
    
    

【讨论】:

在捕获Decodable 错误时,永远,永远,永远不要打印error.localizedDescription。您会收到一条毫无意义的通用错误消息。 总是 print(error) 获得准确的信息是哪里出了问题。 @vadian 更新

以上是关于如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 和 SwiftyJSON 将数据发送到表视图

如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON

如何在 alamofire 中使用自定义动词?

如何将 RxSwift 与 AlamoFire 和 SwiftyJSON 一起使用?

如何使用 AlamoFire 搜索 JSON API 和解码数组

如何使用 Alamofire 和 Swift Decode 从 JSON 解码和访问 Double