Swift 2,如何从多阶段 JSON 响应中获取值
Posted
技术标签:
【中文标题】Swift 2,如何从多阶段 JSON 响应中获取值【英文标题】:Swift 2, how to get values from multistage JSON response 【发布时间】:2016-04-26 08:54:11 【问题描述】:我需要从多阶段 JSON 响应中获取值。 对于我的登录,我从我的服务器获得以下 JSON 数据:
"status": "...",
"payloadList": [
"type": "...",
"authToken": "...",
"user":
"id": ...,
"firstName": "...",
...
]
为了获得 firstName 的值,我尝试了以下方法:
do
let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]
if let payload = (json["payloadList"] as? [AnyObject])
NSLog("Payload: %@", payload);
catch let error as NSError
print("Failed to load: \(error.localizedDescription)")
由于它是多级的,我将其转换为字符串:anyobject 而不是字典。 有效载荷现在看起来像这样:
payload: (
authToken = ...;
type = ...;
user =
id = ...;
firstName = ...;
...
;
)
为了获得名字,我现在应该通过 anyobject。 不幸的是,这不起作用:
if let user = (payload["user"] as? [AnyObject])
NSLog("user: %@", user);
是否有人知道如何通过 anyobject 从中获取名字,或者是否有人通过不使用 anyobject 从头开始有其他解决方案? 非常感谢!
【问题讨论】:
你应该使用 SwiftyJson 。payloadList
是字典数组 ([[String:AnyObject]]
),user
是 payloadList
的键和字典 ([String:AnyObject]
)
【参考方案1】:
您的有效负载是一个 AnyObject 对象数组。所以你必须通过索引来访问它的对象。试试这个变体:
for payloadItem in payload
if let user = payloadItem["user"]
print("user: %@", user);
【讨论】:
【参考方案2】:user 不是数组而是字典。尝试以下方法,它应该可以工作:
if let user = (payload["user"] as? [String:AnyObject])
print("\(user)")
【讨论】:
对否决票有什么解释吗?尝试实现这个,你会发现它会起作用。 payloadList 是一个数组,这就是as? [AnyObject]
起作用的原因;但是,对于用户而言,它不是数组而是字典,您需要对其进行测试as? [String:AnyObject]
。
不是我,我没有尝试您的答案,因为第一个对我有用。不过还是谢谢
是的,无论如何。如果它对你有用,你应该选择正确的答案。
您无法获取数组的“用户”属性。它会崩溃,因为数组没有这样的属性。
我正在向 youtube 上传一个视频,您可以在其中看到操场和 NSLog 的工作情况。还上传了另一个带有 swift 和 nslog 的非常简单的 xcode 项目的视频,并显示它正在工作。只需导入 UIKit 就足够了。如果它不起作用,则意味着您做错了什么。请查看视频,然后我们再谈。视频1:youtu.be/vQTFcIgzhcU 视频:2 youtu.be/SbesKc9ATR8。他们正在处理,因此您可能需要几分钟才能看到。以上是关于Swift 2,如何从多阶段 JSON 响应中获取值的主要内容,如果未能解决你的问题,请参考以下文章
如何在iOS swift的tableview中使用json响应中的键和值?
在 Swift 中使用 JSON 的 Alamofire 请求后,如何在 AnyObject 中转换 <AnyObject> 响应?