使用快速5结果类型的JSON解析存在问题。这是导致错误的以下代码。
这是我的示例JSON数据。
[
9129911,
9129199,
9127761,
9128141,
9128264,
9127792,
9129248,
9127092,
9128367,
9038733
]
这是我的感染代码。
func fetchData(completion: @escaping (Result<[news],Error>) -> Void){
guard let url = URL(string: base_URL) else { return }
URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error {
completion(.failure(error))
return
}
guard let jsonData = data else { return }
do {
let info = try JSONDecoder().decode([news].self, from: jsonData)
//let userId = info
completion(.success(info))
}catch let error {
completion(.failure(error))
}
}.resume()
}
我正在调用此函数
FetchData { (result) in
switch result {
case .success(let info):
self.users = info
print(self.users)
case .failure( let error):
print(error)
}
}
我的self.users代表
var users = [news]()
我的结构是->
struct news: Decodable {
let id: [Int]
}
答案 0 :(得分:0)
您的JSON是一个简单的整数数组,因此您应该像这样解码它:
let info = try JSONDecoder().decode([Int].self, from: jsonData)
[news]
数组将对应于这样的JSON结构:
[
{
"id": [1,2,3]
},
{
"id": [4,5,6]
}
]
它们非常不同。
我建议您将news
结构更改为以下形式:
struct News {
let id: Int
}
然后在解码后,可以将解码后的数据转换为[News]
,如下所示:
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
guard let url = URL(string: base_URL) else { return }
URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error {
completion(.failure(error))
return
}
guard let jsonData = data else { return }
do {
let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
let info = arrayOfInts.map(News.init)
completion(.success(info))
}catch let error {
completion(.failure(error))
}
}.resume()
}