【问题标题】:Swift 2, how to get values from multistage JSON responseSwift 2,如何从多阶段 JSON 响应中获取值
【发布时间】: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])

标签: ios json swift


【解决方案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。他们正在处理,因此您可能需要几分钟才能看到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多