如何使用 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
如何将 RxSwift 与 AlamoFire 和 SwiftyJSON 一起使用?