无法读取数据,因为它的格式不正确
The data couldn't be read because it isn't in the correct format
您好,我正在使用 Xcode 创建一个应用程序,我遇到了以下问题,我使用 mockapi.io 创建了这个 API (如果您输入 link将看到 JSON 数据)https://62858a2ff0e8f0bb7c057f14.mockapi.io/categorias
如果您不想输入 link,这里是 JSON 的样子:(默认情况下,JSON 有一个没有名称的数组作为根,并且可以' t被修改)
[
{
"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 中的数据?
您得到的响应是一个 ResultItem
数组而不是单个对象,因此您需要将其解码为一个数组:
result = try JSONDecoder().decode(Array<ResultItem>.self, from: data)
也就是说,您根本不需要 Response
结构,result
的类型将是 [ResultItem]
.
是的,你的模型有问题你不需要使用(响应)只使用模型(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
}
您好,我正在使用 Xcode 创建一个应用程序,我遇到了以下问题,我使用 mockapi.io 创建了这个 API (如果您输入 link将看到 JSON 数据)https://62858a2ff0e8f0bb7c057f14.mockapi.io/categorias
如果您不想输入 link,这里是 JSON 的样子:(默认情况下,JSON 有一个没有名称的数组作为根,并且可以' t被修改)
[
{
"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 中的数据?
您得到的响应是一个 ResultItem
数组而不是单个对象,因此您需要将其解码为一个数组:
result = try JSONDecoder().decode(Array<ResultItem>.self, from: data)
也就是说,您根本不需要 Response
结构,result
的类型将是 [ResultItem]
.
是的,你的模型有问题你不需要使用(响应)只使用模型(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
}