Ios Swift和api:解码JSON树
在我的应用程序中,我有一个歌曲搜索功能,我调用Happi API(),它将返回歌曲信息与传入的搜索关键字匹配的歌曲 以下是我访问数据的代码:Ios Swift和api:解码JSON树,ios,json,swift,api,httprequest,Ios,Json,Swift,Api,Httprequest,在我的应用程序中,我有一个歌曲搜索功能,我调用Happi API(),它将返回歌曲信息与传入的搜索关键字匹配的歌曲 以下是我访问数据的代码: func getSongs(completion: @escaping(Result<[SongInfo], SongError>) -> Void) { let dataTask = URLSession.shared.dataTask(with: resourceURL) { data, _, _ in
func getSongs(completion: @escaping(Result<[SongInfo], SongError>) -> Void) {
let dataTask = URLSession.shared.dataTask(with: resourceURL) { data, _, _ in
guard let jsonData = data else {
completion(.failure(.noDataAvailable))
return
}
do {
let decoder = JSONDecoder()
let songResponse = try decoder.decode(SongResponse.self, from: jsonData)
//print("decoded")
let songInfos = songResponse.response.results
completion(.success(songInfos))
}catch{
completion(.failure(.canNotProcessData))
}
}
dataTask.resume()
}
以下是API中我的JSON树的照片:
基本上,我只想检索结果:[]字典中的每个数组,然后对于每个数组,我想获取track
和artist
的值。例如,在图像中有5个结果,对于每个结果,我想创建一个具有“track”和“artist”属性的歌曲类。这些歌曲类将存储在一个数组中。请让我知道如何更改我的代码,或者更简单的方法
编辑:错误消息:
keyNotFound(CodingKeys(stringValue:“response”,intValue:nil),Swift.DecodingError.Context(codingPath:[],debugDescription:“没有与键CodingKeys相关的值(stringValue:“response”,intValue:nil)(“response”)。”,underyingError:nil))要镜像json结构,必须在
SongResponse
中更改键
struct SongResponse: Decodable {
var result: [SongInfo]
}
以下是正确的结构
do {
let decoder = JSONDecoder()
let songResponse = try decoder.decode(SongResponse.self, from: jsonData)
let songInfos = songResponse.result ?? []
completion(.success(songInfos))
}catch{
completion(.failure(.canNotProcessData))
}
//模型
struct SongResponse: Decodable {
var success: Bool?
var result: [SongInfo]?
}
struct SongInfo: Decodable {
var track: String?
var artist: String?
}
在catch块中打印(错误)
,查看出了什么问题。错误消息通常非常详细和有用。此外,将您得到的JSON粘贴到app.quicktype.io中,以获得您需要的结构的非常合理的第一个版本need@Gereon谢谢我已更新我的问题,以显示我收到的错误
struct SongResponse: Decodable {
var success: Bool?
var result: [SongInfo]?
}
struct SongInfo: Decodable {
var track: String?
var artist: String?
}