Posts

Post not yet marked as solved
6 Replies
1.6k Views
I'm trying to fetch the top playlists from Apple Music using the charts API and I have the following code: func fetchPopularPlaylists() async throws -> [MusicItemCollection<Playlist>] {     var request = URLRequest(url: URL(string: "https://api.music.apple.com/v1/catalog/US/charts?types=playlists")!)     let userToken = try await fetchUserToken()     request.httpMethod = "GET"     request.addValue("Bearer \(Self.jwt)", forHTTPHeaderField: "Authorization")     request.addValue(userToken, forHTTPHeaderField: "Music-User-Token")     let dataRequest = MusicDataRequest(urlRequest: request)     let response = try await dataRequest.response()     let decoder = JSONDecoder()     let playlistResponse = try decoder.decode(MyChartsResponse.self, from: response.data)     return playlistResponse.results.playlists } And this code works well and as expected, I'm able to populate results. However, I believe that the response is getting decoded incorrectly. My response model object: struct MyChartsResponse: Codable {     struct Results: Codable {         let playlists: [MusicItemCollection<Playlist>]     }     let results: Results } The charts api however has the response listed in the form of: { "results": { "playlists": [ // playlist entities here ] } } This API response makes it seem like the proper Swift decoding structure is either struct MyChartsResponse: Codable {     struct Results: Codable {         let playlists: MusicItemCollection<Playlist>     }     let results: Results } or struct MyChartsResponse: Codable {     struct Results: Codable {         let playlists: [Playlist]     }     let results: Results } but instead the playlist property has to be Array<MusicItemCollection<Playlist>> in order to decode correctly with no custom decoding. The playlists property is incorrectly getting wrapped in an extraneous collection on decoding which makes extracting it difficult.
Posted Last updated
.