2017-06-20 32 views
0

嗨,这是我的json响应,我如何在Array中存储“数据”参数值。我使用的是Alamofire 4和Swift 3.我想要这个数组格式,用于在tableview中加载内容。使用Alamofire解析字典中的json对象

Optional({ 
"current_page" = 2; 
data =  (
      { 
     "address_location" = "place of course"; 
     "category_id" = 1; 
     "course_id" = 122; 
     "course_title" = title; 
     description = "dessription about the course"; 
     favorited = 0; 
     "from_date" = "2017-02-16"; 
     image = "<path>"; 
     lattitude = "0.876423656"; 
     longitude = "6.86885314"; 
     price = 200; 
     "subcategory_id" = 10; 
     thumb = "<path>"; 
     "to_date" = "2017-02-16"; 
     "user_id" = 32332; 
    }, 
      { 
     "address_location" = "place of course"; 
     "category_id" = 1; 
     "course_id" = 123; 
     "course_title" = title; 
     description = "dessription about the course"; 
     favorited = 0; 
     "from_date" = "2017-02-16"; 
     image = "<path>"; 
     lattitude = "0.876423656"; 
     longitude = "6.86885314"; 
     price = 200; 
     "subcategory_id" = 10; 
     thumb = "<path>"; 
     "to_date" = "2017-02-16"; 
     "user_id" = 1; 
    } 
); 
message = Success; 
"next_page" = 3; 
"previous_page" = 1; 
"status_code" = 200; 

})

代码API调用行动

Alamofire.request(urlString, method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in 

     switch(response.result) { 
     case .success(_): 
      if response.result.value != nil{ 
       print(response.result.value as Any) 

       // 

       self.parseData(JSONData: response.data!) 

       if let jsonDict = response.result.value as? [String:Any], 
        let dataArray = jsonDict["data"] as? [[String:Any]] { 
        self.dictionary_Course = dataArray as? [[String:Any]] 
        let nameArray = dataArray.flatMap { $0["address_location"] as? String } 
        print(nameArray) 
       }      
       print(self.dictionary_Course) 


      } 
      else 
      { 
      } 
      break 

     case .failure(_): 
      print(response.result.error as Any) 
      break 

     } 
    } 
+0

它是可选值。你可以添加代码吗? – KKRocks

回答

0

试试这个:

Alamofire.request("url", method: .post, parameters: ["":""]).validate().responseJSON { response in 
      switch response.result { 
      case .success: 
       if let result = response.result.value { 
        let responseDict = result as! [String : Any] 
        let data = responseDict["data"] as! [Any] 
        print(data) 
       } 
      case .failure(let error): 
       print(error) 
      } 
     } 
+0

它的工作,但我怎么可以分配数据到数组中,当我尝试显示错误“无法将类型'__NSArrayI'()的值转换为'NSDictionary'()。” – Lije

+0

你在哪一行出错? – KKRocks

+0

尝试我的更新答案。数据是你的数组。 – KKRocks

0

雨燕3.0

尝试下面的代码,希望能帮助你。

if let result = response.result.value { 
        if let responseDict = result as? NSDictionary { 
         if let data = responseDict.value(forKey: "data") as? 
          [NSDictionary] { 

         } 
         print(data) 
        } 

       } 
+0

我想将对象分配到数组或字典中。我怎样才能分配var dictionary_Course = [String:String]() – Lije

+0

是的,但你可以看到已经有数据在NSDictionary的数组中。 – Jaydeep