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]]),userpayloadList 的键和字典 ([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 响应中获取值的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 Alamofire JSON 响应

如何在iOS swift的tableview中使用json响应中的键和值?

在 Swift 中使用 JSON 的 Alamofire 请求后,如何在 AnyObject 中转换 <AnyObject> 响应?

如何在swift中将json数组保存和检索到用户默认值?

Swift 获取 HTTP JSON 响应并使用 Codable 解析它

如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?