使用 Flickr API 时出现 Alamofire AFError
Posted
技术标签:
【中文标题】使用 Flickr API 时出现 Alamofire AFError【英文标题】:Alamofire AFError when work with Flickr API 【发布时间】:2016-11-20 15:53:00 【问题描述】:我正在使用 Alamofire 从 flickr API 获取 JSON 数据。 这里的 if 函数,它从响应中准备一个 URL 数组:
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)
API URL 中的“tag”是我从搜索栏中获得的参数。在大多数情况下它工作正常,但在某些情况下我得到:
[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.))
我认为可能有一些额外的字符,但我不知道如何修复它。
【问题讨论】:
【参考方案1】:让 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)
【讨论】:
不适合我。仍然得到一些标签的错误。 我错过了一些东西。错误是说响应不是 json。您可以尝试使用 .responseString 并打印结果吗?顺便说一句,继续使用上面相同的代码,因为你不应该自己编码参数 谢谢你,我链接了响应处理程序.responseString
和.responseJSON
。所以我在失败的响应中发现了 \' 的组合,而成功的响应中不存在该组合。我想,我需要获取 responseString,清理响应,然后以某种方式将其转换为 JSON。会想办法……
在响应中有 \' 听起来它是 javascript 特定的。也许有一种方法可以轻松获得干净的 JSON。以上是关于使用 Flickr API 时出现 Alamofire AFError的主要内容,如果未能解决你的问题,请参考以下文章