使用dict将响应转换为json时获得nil

时间:2017-10-09 06:43:01

标签: ios json swift

目前我正在使用login.Using api从server.i获得响应我从api.i得到成功的响应我无法解析我得到的响应。

login.swift

 func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

 let responseString = String(data: data, encoding: .utf8)
            let dict = self.convertToDictionary(text: responseString!)
            print("DICT::", dict as Any)


            let Messaage = dict?["message"] as! String
            print("MESSAGE", Messaage)

            let Status = dict?["status"] as! String
            print("STATUS", Status)

            self.BackEndStatus = Status

           let user = dict?["user"]as?[[String : AnyObject]]
                          print(user)

我可以打印状态和消息bt我无法打印用户。我的用户为零。

2 个答案:

答案 0 :(得分:0)

您可以在此输入Array [[]],必须使用方括号[]进行类型转换,指向Dictionary

尝试使用方括号进行类型转换:

let user = dict?["user"] as? Dictionary<String,Any>

您的回复是:

[
  "status": 1,
  "user": {
    address=null;
    created="2017-10-09 00:29:38";
    "device_id"="<null>";
    "device_type"="<null>";
    email="chinju@gmail.com";name=Chinju;
    password=76a531c195212d35ee109be6e131ac73;
    "phone_no"=8086502009;
    "profile_status"=1;
    "social_id"="<null>";
    "social_type"="<null>";
    "user_id"=31;
    "user_role"=1;
  },
  "message": loginsuccess
])

答案 1 :(得分:0)

user的值是字典,而不是数组。

强烈建议使用可选绑定安全地打开选项。

为什么要将Data转换为String然后再转回Data

func convertToDictionary(data: Data) -> [String: Any]? {
    do {
       return try JSONSerialization.jsonObject(with: data) as? [String: Any]
    } catch {
       print(error.localizedDescription)
       return nil
    }
}
if let dict = self.convertToDictionary(data: data) {
    print("DICT::", dict)

    let message = dict["message"] as! String
    print("MESSAGE", message)

    let status = dict["status"] as! String
    print("STATUS", status)

    self.backEndStatus = status

    if let user = dict["user"] as? [String : Any] {
        print(user)
    }
}

PS:请遵守变量名称以小写字母

开头的命名约定