Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 响应序列化错误,如何修复?_Json_Swift_Alamofire_Promisekit - Fatal编程技术网

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

我试图解码json数据,但它抛出一个错误:

[]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)
            }
        }
    }
}