如何将json数组转换为对象数组Alamofire



我在api中有这样的数组:

[{
data = "";
datetime = "23.07.2020 12:09";
id = 340593;
status = "My current task is";
},...]

我创建了这样的结构:

struct RemarksModel {
let id:Int
let status,datetime:String
let data:String?
}

我在这里提出请求:

AF.request(URLRequest(url:Pathes.init(endpoint: "notepad/(noteModel?.id ?? 0)/documentation").resourseUrl),
interceptor: CallInterceptor.init(method:HTTPMethod.get)).responseJSON(completionHandler: { (response) in
print(response.description)
switch response.result{
case .success(let array):
let remarksData = array as? [RemarksModel]

let json = response.data as? [RemarksModel]


print(json?.count)


//                        if remarksData?.count ?? 1 > 0{
//                            self.remarksArray += remarksData!
//                            self.tableView.reloadData()
//                        }


case .failure(let error):
print(error.localizedDescription)

}

})

问题是我无法将这个数组转换为我的模型对象数组。当我试图将所有接收到的数据添加到数组时,我的应用程序崩溃了,因为我的数组为零,尽管日志中有json。也许我必须使用另一种方法将接收到的json数组转换为对象数组?

在确认RemarksModelCodable(或仅Decodable(协议后,可以直接使用.responseDecodable函数,而不是.responseData.responseJSON

.responseDecodable(of: [RemarksModel].self, queue: .main, decoder: JSONDecoder()) { (response) in
switch response.result {
case let .success(data):
// success
print(data)
case let .failure(error):
// error
print(error.localizedDescription)
}
}

您可以将Codable协议添加到RemarksModel,并使用.responseData而不是.responseJSON

.responseData { response in
switch response.result {
case let .success(data):
do {
let result = try JSONDecoder().decode([RemarksModel].self, from: data)
// success
} catch {
print("decoding error:n(error)")
// error
}
case let .failure(error):
// error
}
}

最新更新