JSONMagic
用于在 Swift 中轻松遍历和解析 JSON。
假设您从服务器接收到以下 JSON 用户配置文件
{
"user": {
"name": "David Keegan",
"age": 30,
"accounts": [
{
"name": "twitter",
"user": "iamkgn"
},
{
"name": "dribbble",
"user": "kgn"
},
{
"name": "github",
"user": "kgn"
}
]
}
}
解析这样的内容可能需要在 Swift 中使用许多嵌套的 if 语句来将内容转换为正确的类型,以遍历数据树。
let twitterUser: String?
if let data = serverResponse {
if let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: Any] {
if let user = json?["user"] as? [String: Any] {
if let accounts = user["accounts"] as? [Any] {
if let twitter = accounts.first as? [String: Any] {
twitterUser = twitter["user"] as? String
}
}
}
}
}
let twitterUser = JSONMagic(data: serverResponse).get("user").get("accounts").first.get("user").string
或者,如果您更喜欢下标语法 :)
let twitterUser = JSONMagic(data: serverResponse)["user"]["accounts"][0]["user"].string
它甚至支持 Paw 键路径。
let twitterUser = JSONMagic(data: serverResponse).keypath("user.accounts.0.user").string
JSONMagic
通过方法链处理所有这些,因此您可以一直使用可以无限链的神奇包装对象 JSONMagic
,然后在最后调用 value
来获取最终值并将其转换为所需的最终类型。它还为所有 JSON 数据类型提供辅助方法:.bool
、.int
、.float
、.double
、.string
、.array
和 .dictionary
。
它非常松散地处理这些,因此不关心传入数据或链中的 nil
值。
let json = JSONMagic(data: serverResponse)
json.get("user").get("name").string // David Keegan
json["user"]["age"].integer // 30
let twitter = json.get("user").get("accounts").first
twitter["name"].value // twitter
twitter["user"].value // iamkgn
let dribbble = json.get("user").get("accounts").get(1)
dribbble.get("name").value // dribbble
dribbble.get("user").value // kgn
let github = json.get("user").get("accounts").last
github.get("name").value // github
github.get("user").value // kgn
let bad = json.get("user").get("accounts").get(5)
bad.get("name").value // nil
bad.get("user").value // nil