【发布时间】:2018-02-07 08:22:52
【问题描述】:
我正在 swift 4 中尝试新的 JSONDecoder() 并尝试解析以下 flickr API 响应:(https://api.flickr.com/services/rest/?api_key=api_key&method=flickr.photos.search&format=json&per_page=25&text=hello&nojsoncallback=1)。但是,我收到一条错误消息,提示“处理 json 数据时出错:无法读取数据,因为它的格式不正确。”但是,数据对我来说似乎是正确的格式。我做错什么了吗?
let dataTask = session.dataTask(with: urlRequest) { (data, response, error) in
if let error = error {
print("json error: \(error.localizedDescription)")
return
} else if let data = data {
print(response)
do {
let decoder = JSONDecoder()
print(data)
let flickrPhotos = try decoder.decode(FlickrImageResult.self, from: data)
} catch {
dump(data)
print("json error: \(error.localizedDescription)")
}
}
}
dataTask.resume()
我的数据模型是
struct FlickrImageResult : Codable {
var photos : FlickrPhoto? = nil
}
struct FlickrPhoto : Codable {
var photo : [FlickrURLs]? = nil
}
struct FlickrURLs: Codable {
var id : String? = nil
var owner: String? = nil
var secret: String? = nil
var server: String? = nil
var farm: String? = nil
}
我将请求的图像数量更改为 2 并打印出数据返回 可选({"照片":{"page":1,"pages":120197,"perpage":2,"total":"240393","photo":[{"id":"36729752762","owner ":"152440263@N02","secret":"e62ba3e18b","server":"4432","farm":5,"title":"你好","ispublic":1,"isfriend":0 ,"isfamily":0},{"id":"36729384952","owner":"141041947@N06","secret":"bc0e5af630","server":"4380","farm":5," title":"POST\ud83d\udd25 #891 | 你好星期二 | Krescendo","ispublic":1,"isfriend":0,"isfamily":0}]},"stat":"ok"})
【问题讨论】:
-
如果您只是从 URL 响应中打印
data,它是否显示正确的 JSON 字符串? -
所以响应返回 200,打印数据返回 4694 字节,所以我认为那里有东西。
-
试试
print(String(bytes:data, encoding: .utf8) )看看到底有什么 -
我就是这么做的,谢谢!它确实返回了我将其添加到问题中的正确数据。
-
答案已更新为分页响应。
标签: json swift json-deserialization swift4