gpt4 book ai didi

json - Swift 4 json解码器错误flickr

转载 作者:搜寻专家 更新时间:2023-10-30 21:50:27 26 4
gpt4 key购买 nike

我正在 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 并打印出数据返回 可选({“照片”:{“页面”:1,“页面”:120197,“每页”:2,“总计”:“240393”,“照片”:[{“id”:“36729752762”,“所有者":"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"})

最佳答案

您的模型的唯一问题是 farm 实际上是一个 Int。这是根据文档 ( https://www.flickr.com/services/api/flickr.photos.search.html ) 更完整的模型版本:

struct FlickrImageResult: Codable {
let photos : FlickrPagedImageResult?
let stat: String
}

struct FlickrPagedImageResult: Codable {
let photo : [FlickrURLs]
let page: Int
let pages: Int
let perpage: Int
let total: String
}

struct FlickrURLs: Codable {
let id : String
let owner: String
let secret: String
let server: String
let farm: Int
// let title: String
// If needed, camel-case and use CodingKeys enum
//let ispublic: Int
//let isfriend: Int
//let isfamily: Int
}

let jsonData = """
{
"photos": {
"page": 1,
"pages": 13651,
"perpage": 25,
"total": "341263",
"photo": [
{
"id": "36499638920",
"owner": "55126206@N07",
"secret": "7e82dee0ba",
"server": "4346",
"farm": 5,
"title": "[BREATHE]-Ririko,Sayaka&Chiyoko",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
},
{
"id": "36724435032",
"owner": "92807782@N04",
"secret": "6d830d4a75",
"server": "4354",
"farm": 5,
"title": "Serendipity Designs @ SWANK August 2017",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
},
{
"id": "36087089863",
"owner": "152685136@N08",
"secret": "a4a3f2fe0a",
"server": "4365",
"farm": 5,
"title": "Hello Kitty Scooter",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
},
{
"id": "36086949593",
"owner": "151818203@N02",
"secret": "fc1207d373",
"server": "4334",
"farm": 5,
"title": "Hip, Hip! It's Chip!",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
},
{
"id": "36498504410",
"owner": "148300038@N02",
"secret": "5c7f6ff3e1",
"server": "4391",
"farm": 5,
"title": "Hello Kotti",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
}
]
},
"stat": "ok"
}
""".data(using: .utf8)!

let flickrPhotos = try! JSONDecoder().decode(FlickrImageResult.self, from: jsonData)
print(flickrPhotos)


P.S: 消息 error processing json data: The data couldn't be read because it isn't in the correct format. 是本地化的错误消息,使用 print(error) 而不是 print(errorlocalizedDescription) 来获取所有可用的错误数据(在您的情况下,它将打印出尝试解码农场 key 时出现问题)。

关于json - Swift 4 json解码器错误flickr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com