gpt4 book ai didi

ios - Swift和API:解码JSON树

转载 作者:行者123 更新时间:2023-12-01 19:30:06 25 4
gpt4 key购买 nike

在我的应用程序中,我具有一个歌曲搜索功能,在其中调用了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:[]字典中的每个数组,然后对于每个数组,我想获取 trackartist的值。例如,在图像中有5个结果,对于每个结果,我想创建一个具有“track”和“artist”属性的歌曲类。这些歌曲类将存储在数组中。请让我知道如何更改我的代码,或者更简单的方法!
编辑:错误消息:
keyNotFound(CodingKeys(stringValue:“response”,intValue:nil),Swift.DecodingError.Context(codingPath:[],debugDescription:“没有与键CodingKeys(stringValue:” response“,intValue:nil相关联的值)(” response“)。“,underlyingError:nil))

最佳答案

以下是正确的结构

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?
}

关于ios - Swift和API:解码JSON树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63365445/

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