预期解码 Dictionary<String, Any> 但发现了一个数字
Expected to decode Dictionary<String, Any> but found a number instead
JSON 解析 swift 5 结果类型时出现问题。以下是导致错误的代码。
这是我的示例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]
}
你的 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()
}
JSON 解析 swift 5 结果类型时出现问题。以下是导致错误的代码。
这是我的示例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]
}
你的 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()
}