JSON解码打印错误,而不是打印解码后的数据



我正在尝试从JSONArray获取authordownload_url下面。

[
{
"id": "0",
"author": "Alejandro Escamilla",
"width": 5616,
"height": 3744,
"url": "https://unsplash.com/photos/yC-Yzbqy7PY",
"download_url": "https://picsum.photos/id/0/5616/3744"
},
{
"id": "1",
"author": "Alejandro Escamilla",
"width": 5616,
"height": 3744,
"url": "https://unsplash.com/photos/LNRyGwIJr5c",
"download_url": "https://picsum.photos/id/1/5616/3744"
} ]

创建ImageStruct将JSON中的数据转换为ImageStruct对象。

struct ImageData: Codable {
var author: String
var dataURL : String
}

我的JSON解码处理是在一个名为JSONDecodeHandler的结构的函数中完成的。处理解码的函数称为jsonDecode输入参数">data">

struct JSONDecodeHandler {
static let shared = JSONDecodeHandler()
let decoder = JSONDecoder()
func jsonDecode(data: Data) {
do {
let decodedData = try decoder.decode([ImageData].self, from: data)
print("decodedData is (decodedData)")
}
catch {
print("error on decoding JSON")
}
}
}

这个函数的输入是在一个叫做APIHandler的结构体中给出的

struct APIHandler {
static let shared = APIHandler()
private let jsonUrl = "https://picsum.photos/v2/list"
public func getDataFromURL() {

guard let stringToURL = URL(string: jsonUrl) else { return } // Creating URL FRom string.
let urlSession = URLSession(configuration: .default) // Creating URLSession
let urlSessionDataTask = urlSession.dataTask(with: stringToURL) { data, URLResponse, error in

if error == nil {
guard let unwrappedData = data else { return }
JSONDecodeHandler.shared.jsonDecode(data: unwrappedData)
}
else {
print("Error in getting data from URL")
}

}
urlSessionDataTask.resume() // Resuming the DataTask
}
}

的completionBlock let urlSessionDataTask = urlSessionDataTask返回数据类型,称为Data。这个数据是JSONDecodeHandler结构体的函数jsonDecode(data:)的输入参数。

最后,函数getDataFromURL()structAPIHAndler在我的viewController的viewDidLoad中被调用,如下所示。
override func viewDidLoad() {
APIHandler.shared.getDataFromURL()
}

通过执行这些步骤,我在终端上看到的是解码json时的"错误">,我在JSONDecodeHandler结构体中编写了该错误,以便捕获错误。所以基本上我不能解码JSON数据。我在这里错过了什么?由于

这个名字在你的struct ImageDatadataURL但jsondownload_urlurl。这些名字必须匹配,Swift才能解码json。那么你dataURL字段是空的。

最新更新