通过Alamofire的JSON响应循环



我使用的是xcode 7.2和swift 2.1.1。使用Alamofire进行服务器通信。我有一个显示动态数据的表视图。数据包括用户名、用户电子邮件、个人资料图片等。我试图从stackoverflow实现这个代码。但我收到一条警告消息,说从"JSON"转换为不相关的类型"[Dictionary]"总是失败我的JSON响应是

{
  "JsonRequestBehavior" : 1,
  "MaxJsonLength" : null,
  "ContentType" : null,
  "Data" : {
    "_id" : "5658444778a7531f4c79c23d",
    "Photo" : "",
    "AllowSharing" : "YES",
    "MemberCount" : 5,
    "Users" : [
      {
        "_id" : "5658443478a7531f4c79c23c",
        "Photo" : "",
        "MembershipDate" : "0001-01-01T00:00:00",
        "MiddleName" : null,
        "FirstName" : "Gohan",
        "LastName" : null,
        "Email" : "gohan@gmail.com"
      },
      {
        "_id" : "566ea5f1dfead62350cf0fad",
        "Photo" : "",
        "MembershipDate" : "0001-01-01T00:00:00",
        "MiddleName" : null,
        "FirstName" : null,
        "LastName" : null,
        "Email" : "sachin@gmail.com"
      }
    ],
    "MembershipDate" : "2015-12-14T12:03:12.819Z",
    "CreatedBy" : "5658443478a7531f4c79c23c"
  },
  "ContentEncoding" : null,
  "RecursionLimit" : null
}

如何在JSON响应中循环浏览用户

编辑根据JohnyKutty的回答,我在项目中尝试了相同的代码。相同的代码是

 Alamofire.request(.GET,App.AppHomeURL() + "Load_Group", parameters: ["groupid":"(groupId)"]).responseJSON
            {
                response in
                 print("(response.data)")
                switch response.result
                {
                case .Success(let _data):
                    let jsonData = JSON(_data)
                    print("Admin Response : (jsonData)")
                do
                   {
                    let json = try NSJSONSerialization.JSONObjectWithData(_data as! NSData, options: .AllowFragments) as! NSDictionary
                        if let DataObject = json["Data"] as? NSDictionary
                        {
                            if let users = DataObject["Users"] as? [NSDictionary]
                            {
                                for user in users
                                {
                                    print("User id : (user["_id"])")
                                }
                            }
                        }
                   }
                    catch let error as NSError
                    {
                        print(error.localizedDescription)
                    }

在这一行中,让json=try NSJSONSerialization.JSONObjectWithData(_data as!NSData,options:.AllowFragments)as!NSDictionary一开始我使用"_data",然后Xcode建议进行更改,它从_data更改为_data!NSData。

您的子结构如下JSON(字典)->数据(字典)->Users(字典数组)。因此,首先应该从原始json中选择Users数组,然后对其进行迭代

由于alamofire已经在序列化您的响应,无需再次使用JSONSerializer,我正在更新我的答案。

更新在案例中尝试此代码

if let DataObject = _data["Data"] as? NSDictionary {
    if let Users = DataObject["Users"] as? [NSDictionary] {
        for user in Users {
            print(user["_id"],user["MembershipDate"],user["FirstName"],user["Email"], separator: "   ", terminator: "n")
        }
    }
}

完整代码:

Alamofire.request(.GET,App.AppHomeURL() + "Load_Group", parameters: ["groupid":"(groupId)"]) .responseJSON { response in
        switch response.result {
        case .Success(let _data):
            print(_data)
            if let DataObject = _data["Data"] as? NSDictionary {
                if let Users = DataObject["Users"] as? [NSDictionary] {
                    for user in Users {
                        print(user["_id"],user["MembershipDate"],user["FirstName"],user["Email"], separator: "   ", terminator: "n")
                    }
                }
            }
        default:
            break;
        }

}

最新更新