首页 > 解决方案 > 在标签中打印 JSON 响应时出现问题

问题描述

我是 swift 新手,我正在使用 alamofire 方法调用 API。我已成功获得响应,但无法理解如何在标签上解析这是我尝试过的代码

Alamofire.request(url, method: .get).responseJSON
{
    response in
    let result = response.result.value
    print(response)
    if result != nil{
        let data = result as! [String : AnyObject]


        let userdata = data["data"] as! NSDictionary

        let address = userdata["address"]
        let city = userdata["city"]
        let pincode = userdata["pincode"]
        let state = userdata["state"]
        self.lblAddress.text = city as? String
        self.lblCity.text = address as? String
        self.lblpincode.text = pincode as? String
        self.lblstate.text = state as? String
    }
}

这是我得到的回应

SUCCESS: {
    "city_address" = 
    (
        {
            address = "404 palladium business hub.";
            city = Ahmedabad;
            pincode = 380061;
            state = Gujarat;
        }
    );
}

无法理解我哪里出错了,请帮我解决这个问题。

输出为print(result)

{
    "city_address" =     (
                {
            address = "404 palladium business hub.";
            city = Ahmedabad;
            pincode = 380061;
            state = Gujarat;
        }
    );
}

标签: swiftapialamofire

解决方案


两个问题:

  1. 包含地址信息的对象是key的值city_address
  2. 这个对象显然是一个数组(注意括号)

不要NSDictionary在 Swift 中使用,未指定的 JSON 值始终为Any.

if let result = response.result.value as? [String:Any], 
   let dataArray = result["city_address"] as? [[String : Any]], // maybe even `[[String:String]]`
   let userData = dataArray.first {
      let address = userData["address"]
      let city = userData["city"]
      let pincode = userData["pincode"]
      let state = userData["state"]
      DispatchQueue.main.async {
         self.lblAddress.text = address as? String
...

推荐阅读