您好,我正在使用 Xcode 創建應用程式,但遇到以下問題,我使用 mockapi.io 創建了此 API(如果您輸入鏈接,您將看到 JSON 資料)https://62858a2ff0e8f0bb7c057f14.mockapi.io/categorias
如果您不想在此處輸入鏈接,請查看 JSON 的外觀:(默認情況下,JSON 有一個沒有名稱的陣列作為根,并且無法修改)
[
{
"categorie":"Fruits",
"id":"1"
},
{
"categorie":"Animals",
"id":"2"
},
{
"categorie":"Vegetables",
"id":"3"
},
{
"categorie":"Juices",
"id":"4"
},
{
"categorie":"Alcohol",
"id":"5"
},
{
"categorie":"Desserts",
"id":"6"
}
]
我遇到的問題是,當我嘗試從 API 解碼資料時,由于格式錯誤而無法讀取它,我正在嘗試重新創建此 youtube 視頻的相同代碼,但使用我的 API:https:/ /www.youtube.com/watch?v=sqo844saoC4
這就是我的代碼的樣子:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let url = "https://62858a2ff0e8f0bb7c057f14.mockapi.io/categorias"
getData(from: url)
}
private func getData(from url: String) {
let task = URLSession.shared.dataTask(with: URL(string: url)!, completionHandler: { data, response, error in
guard let data = data, error == nil else {
print("something went wrong")
return
}
var result: Response?
do {
result = try JSONDecoder().decode(Response.self, from: data)
}
catch {
print("failed to convert\(error.localizedDescription)")
}
guard let json = result else {
return
}
print(json.items.categorie) // ?? HERE ES WHERE THE PRINT HAPPENS
})
task.resume()
}
}
// ?? I THINK THE PROBLEM IS DEFINITELY HERE
struct Response: Codable {
let items: ResultItem
}
struct ResultItem: Codable {
let categorie: String
}
當我執行此操作時,終端列印:“無法讀取資料,因為它的格式不正確。”
我很確定錯誤來自我在結構中呼叫資料的方式,所以我的問題是......?如何在代碼中準確呼叫 API 的 JSON 中的資料?
uj5u.com熱心網友回復:
是的,您的模型中有一個問題,您不需要使用(回應)只使用模型(ResultItem)JSON不是復雜的JSON,就像它只是(ResultItem)的陣列
private func getData(from url: String) {
let task = URLSession.shared.dataTask(with: URL(string: url)!, completionHandler: { data, response, error in
guard let data = data, error == nil else {
print("something went wrong")
return
}
do {
let result = try JSONDecoder().decode([ResultItem].self, from: data)
print(result)
}
catch {
print("failed to convert\(error.localizedDescription)")
}
})
task.resume()
}
struct ResultItem: Codable {
let categorie: String
}
uj5u.com熱心網友回復:
您得到的回應是一個 s 陣列ResultItem而不是單個物件,因此您需要將其解碼為一個陣列:
result = try JSONDecoder().decode(Array<ResultItem>.self, from: data)
也就是說,您根本不需要Responsestruct 并且型別result將是[ResultItem].
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480025.html
