"Expected to decode Array<Any> but found a dictionary instead."



我试图从JSON文件中获取信息,这里是它的内容{ "question" : "https://www.sanfoh.com/uob/smile/data/s117b97da1ca0c9cbd2836d8af2n886.png" , "solution" : 6 }

然而,每次我试图从中获取信息时,我都会得到这个错误"typeMismatch(斯威夫特。数组,Swift.DecodingError。上下文(codingPath: [], debugDescription: "期望解码数组,但发现一个字典。",底层错误:nil))">

我的代码

import Foundation
struct Game: Hashable, Codable {
let question: String
let solution: Int
}
class ViewModel: ObservableObject {
@Published var games: [Game] = []

func fetch() {
guard let url = URL(string: "https://marcconrad.com/uob/smile/api.php") else {
return
}

let task = URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
guard let data = data, error == nil else {
return
}

do {
let games = try JSONDecoder().decode([Game].self, from: data)
DispatchQueue.main.async {
self?.games = games
print(games)
}
}
catch {
print(error)
}
}
task.resume()
}
}

我已经尝试删除方括号

let games = try JSONDecoder().decode(Game.self, from: data)

但是我在这一行得到了一个错误'

self?.games = games

错误提示"不能将类型'游戏'的值分配给类型'[游戏]'

响应不是一个数组,而是一个字典。所以你应该这样解析:

let games = try JSONDecoder().decode(Game.self, from: data)

同时,您应该更新变量的类型,如

@Published var games: Game?

相关内容

最新更新