2016-11-20 50 views
1

我使用Alamofire從flickr API獲取JSON數據。 此處若功能,準備URL的數組從響應:在API URLAlamofire AFError在使用Flickr API時

func urlTolinkslist (tag: String) { 
    print (viewSearchBar.text) 
    let url = "https://api.flickr.com/services/feeds/photos_public.gne?tags=\(tag.replacingOccurrences(of: " ", with: "%20"))&format=json&nojsoncallback=1" 
    Alamofire.request(url).validate().responseJSON { response in 
     switch response.result { 
     case .success(let value): 
      let json = JSON(value) 
      let items = json["items"] 
      self.linksList = [] 
      for i in 0..<items.count { 
       let item = items[i] 
       let media = item["media"] 
       var link = String(describing: media["m"]) 
       self.linksList.append(link) 
      } 
      print("count: \(self.linksList.count)") 
      self.viewCollectionView.reloadData() 
     case .failure(let error): 
      print(error) 
     } 
    } 
} 

「標籤」是我從一個搜索欄獲取參數。在大多數情況下,它工作正常,但在某些情況下,我得到:

[Result]: FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid escape sequence around character 1029." UserInfo={NSDebugDescription=Invalid escape sequence around character 1029.})) 

我想可能會有一些額外的字符,但我不知道如何解決它。

回答

0

讓Alamofire編碼爲您的參數:

func urlTolinkslist (tag: String) { 
    let url = "https://api.flickr.com/services/feeds/photos_public.gne" 
    var dict = [String:AnyObject]() 
    dict["tags"] = tag 
    dict["format"] = "json" 
    dict["nojsoncallback"] = 1 
    Alamofire.request(.GET, url, parameters: dict, encoding: .URLEncodedInURL, headers: nil).validate().responseJSON { response in 
     switch response.result { 
     case .success(let value): 
      let json = JSON(value) 
      let items = json["items"] 
      self.linksList = [] 
      for i in 0..<items.count { 
       let item = items[i] 
       let media = item["media"] 
       var link = String(describing: media["m"]) 
       self.linksList.append(link) 
      } 
      print("count: \(self.linksList.count)") 
      self.viewCollectionView.reloadData() 
     case .failure(let error): 
      print(error) 
     } 
    } 
} 
+0

並沒有爲我工作了。仍然得到一些標籤的錯誤。 – Ana

+0

Oups我錯過了一些東西。錯誤是說響應不是json。你可以嘗試使用.responseString並打印結果嗎? Btw保持使用上面相同的代碼,因爲你不應該自己編碼參數 – ELKA

+0

謝謝你,我鏈接響應處理程序'.responseString'和'.responseJSON'。所以我在失敗的迴應中發現了** \ **,這在成功的組合中並不存在。我想,我需要得到responseString,清理響應,然後將其轉換爲JSON。將嘗試找到一種方式... – Ana