【发布时间】:2020-12-01 13:09:37
【问题描述】:
在我的应用中,我有一个歌曲搜索功能,我调用 Happi API (https://happi.dev/docs/music),它会返回歌曲信息与传入的搜索关键字匹配的歌曲。
这是我访问数据的代码:
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()
}
代码的let dataTask 部分成功,不会返回noDataAvailable 错误。但是,当我对 JSON 数据进行解码时,我确实收到了 canNotProcessData 错误,我认为这是因为我的结构中存在错误,但并不完全确定。这是我的结构:
struct SongResponse:Decodable {
var response:Results
}
struct Results:Decodable {
var results: [SongInfo]
}
struct SongInfo:Decodable {
var songName:String
var artist:String
}
以下是来自 API 的 JSON 树的照片:image 1 image 2
基本上,我想要的只是检索 results:[] 字典中的每个数组,然后对于每个数组,我想获取 track 和 artist 的值。例如,在图像中有 5 个结果,对于每个结果,我想创建一个带有“track”和“artist”属性的歌曲类。这些歌曲类将存储在一个数组中。请告诉我如何更改我的代码,或更简单的方法!
编辑:错误信息: keyNotFound(CodingKeys(stringValue: "response", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: "response", intValue: nil) ("response" ).",基础错误:无))
【问题讨论】:
-
print(error)在你的 catch 块中看看有什么问题。错误消息通常非常详细且有用。 -
另外,将您输入的 JSON 粘贴到 app.quicktype.io 中,以获得您需要的结构的非常合理的第一个版本
-
@Gereon 谢谢!我已更新我的问题以显示我收到的错误
标签: ios json swift api httprequest