SwiftCafe 快报 - 使用 SwiftyJSON 处理 JSON 解析

swift 发布于 2021年09月26日

iOS 为我们提供了解析 JSON 的库 NSJSONSerialization,我们看看使用标准库的处理方法:

let JSONObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)

if let statusesArray = JSONObject as? [AnyObject],
let status = statusesArray[0] as? [String: AnyObject],
let user = status["user"] as? [String: AnyObject],
let username = user["name"] as? String {
// Finally we got the username
}

嗯,看起来可以用,但是不是感觉处理起来还是有点繁琐呢?

如果遇到使用 OptionalChaining 的情况就会变得更加混乱:

let JSONObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)

if let username = (((JSONObject as? [AnyObject])?[0] as? [String: AnyObject])?["user"] as? [String: AnyObject])?["name"] as? String {
// What a disaster
}

这一连串的 as 转换和问号解包,让人感觉很混乱吧。

这就是 SwiftyJSON 这个库要解决的问题了。我们再来看一下使用 SwiftyJSON 来处理这个解析的代码:

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
//Now you got your value
}

是不是马上简单很多了。无论是可读性还是逻辑的清晰性都有了极大的提升。

并且您也不用担心错误处理和 Optional 解包的问题,SwiftlyJSON 已经帮您处理这个问题了:

let json = JSON(data: dataFromNetworking)
if let userName = json[999999]["wrong_key"]["wrong_name"].string {
//Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety
} else {
//Print the error
print(json[999999]["wrong_key"]["wrong_name"])
}

关于 SwiftyJSON 更详细的内容,可以查看它的 Github 主页: https://github.com/SwiftyJSON/SwiftyJSON


如果你觉得这篇文章有帮助,还可以关注微信公众号 swift-cafe,会有更多我的原创内容分享给你~

本站文章均为原创内容,如需转载请注明出处,谢谢。
关注微信公众号
发现更多精彩
swift-cafe