Json 响应序列化错误,如何修复?
我试图解码json数据,但它抛出一个错误:Json 响应序列化错误,如何修复?,json,swift,alamofire,promisekit,Json,Swift,Alamofire,Promisekit,我试图解码json数据,但它抛出一个错误: []nw_协议(获取)quic_图像(块)调用dlopen libquic失败响应序列化失败(原因:Alamofire.AFError.ResponseSerializationFailureReason.DecodingFailureFailured)(错误:Swift.DecodingError.Type失配)Swift.Dictionary,Swift.DecodingError“应解码字典,但找到了数组。”,underyingerror:nil
[]nw_协议(获取)quic_图像(块)调用dlopen libquic失败响应序列化失败(原因:Alamofire.AFError.ResponseSerializationFailureReason.DecodingFailureFailured)(错误:Swift.DecodingError.Type失配)Swift.Dictionary,Swift.DecodingError“应解码字典,但找到了数组。”,underyingerror:nil))
我想,我是以正确的方式做的,我也检查了类型不匹配,看起来是正确的,但无法理解为什么我仍然得到错误
下面是我的json数据响应的样子:
[
{
"id": 1,
"name": "BlackJet",
"type": "Silk",
"quantity": "100"
},
[
{
"id": 2,
"name": "Toto",
"type": "Leather",
"quantity": "10"
},
...,
]
这是我的结构数据:
import Foundation
struct Response<T: Codable>: Codable {
var data: [T]?
}
struct MyData: Codable {
var id: Int
var name: String
var type: String
var quantity: Int
}
注意:my api中不存在api头或参数//首先,您需要根据响应将
数量
的类型从Int
更改为字符串
struct MyData: Codable {
var id: Int
var name: String
var type: String
var quantity: String
}
然后您需要更改getData
方法的签名,如下所示
static func getData() -> Promise<[MyData]> {
let decoder = JSONDecoder()
return Promise { seal in
AF.request(API.getData, method: .get, parameters: .none).responseDecodable(of: [MyData].self, decoder: decoder) { response in
switch response.result {
case .success(let val):
return seal.fulfill(val)
case .failure(let err):
return seal.reject(err)
}
}
}
}
static func getData()->Promise{
let decoder=JSONDecoder()
返回承诺{盖章
AF.request(API.getData,方法:.get,参数:.none)。responseDecodable(of:[MyData]。self,解码器:解码器){response in
开关响应。结果{
成功案例(let val):
返回密封件。完成(val)
案例。失败(错误):
退回封条。拒绝(错误)
}
}
}
}
您的JSON中没有数据
键。static func getData()->Promise
=>static func getData()->Promise
?和responseDecodable(of:Response.self
=>responsecodable(of:[MyData].self
?我解决了它。谢谢您的帮助..)我也会很快发布我的更新解决方案…这是一个很小的错误..顺便说一句,我认为问题仍然存在,我以为我解决了问题,但事实上,似乎我实际上没有..可能是什么问题。。?
struct MyData: Codable {
var id: Int
var name: String
var type: String
var quantity: String
}
static func getData() -> Promise<[MyData]> {
let decoder = JSONDecoder()
return Promise { seal in
AF.request(API.getData, method: .get, parameters: .none).responseDecodable(of: [MyData].self, decoder: decoder) { response in
switch response.result {
case .success(let val):
return seal.fulfill(val)
case .failure(let err):
return seal.reject(err)
}
}
}
}