[英]How to parse Array with Alamofire 5
我在使用 Alamofire 5 解碼 json 數據時需要幫助。我對這個無法解碼的數組感到困惑....
[
{
"Date": "2022-08-08T00:00:00",
"Day": "Fri",
"AbsenceCount": 0,
"AbsenceRequestComments": "Request permitted",
"Color": "No",
"IsRequestPermitted": true
},
{
"Date": "2022-09-09T00:00:00",
"Day": "Sat",
"AbsenceCount": 0,
"AbsenceRequestComments": "Request permitted",
"Color": "No",
"IsRequestPermitted": true
},
{
"Date": "2022-12-15T00:00:00",
"Day": "Sun",
"AbsenceCount": 0,
"AbsenceRequestComments": "Request permitted",
"Color": "No",
"IsRequestPermitted": true
}
]
我正在從這個 stackoverflow 中嘗試所有內容,但沒有找到對我的案例有幫助的東西。 我還使用 Codable model 嘗試了 responseString、responseData、responseJSON 和 finaly responseDecodableOf。
let request = AF.request(requestURL, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: returnHeader())
.validate()
.responseDecodable(of: [CoverCheckForDay].self) { response in
switch response.result {
case .success:
guard let value = response.value else { failure(""); return }
success(value)
case .failure(let error):
failure(error.localizedDescription)
}
}
我的 model
struct CoverCheckForDay: Codable {
let date: String
let day: String
let absenceCount: Int
let absenceRequestComments: String
let color: String
let isRequestPermitted: Bool
enum CodingKeys: String, CodingKey {
case date = "Date"
case day = "Day"
case absenceCount = "AbsenceCount"
case absenceRequestComments = "AbsenceRequestComments"
case color = "Color"
case isRequestPermitted = "IsRequestPermitted"
}
}
我收到無效類型的錯誤,同樣在 responseString 的情況下,我有一些字符串:“\”。 就是這樣,我將非常感謝您的幫助,謝謝!
編輯:來自alamofire的錯誤
▿ Optional<AFError>
▿ some : AFError
▿ responseSerializationFailed : 1 element
▿ reason : ResponseSerializationFailureReason
▿ decodingFailed : 1 element
▿ error : DecodingError
▿ typeMismatch : 2 elements
- .0 : Swift.Array<Any>
▿ .1 : Context
- codingPath : 0 elements
- debugDescription : "Expected to decode Array<Any> but found a string/data instead."
- underlyingError : nil
我的參數:
▿ 3 elements
▿ 0 : 2 elements
- key : "employeeId"
- value : 13558
▿ 1 : 2 elements
- key : "dates"
▿ value : 3 elements
▿ 0 : CoverRequestArray
▿ date : Optional<String>
- some : "01/09/2022"
▿ day : Optional<String>
- some : "Thu"
▿ 1 : CoverRequestArray
▿ date : Optional<String>
- some : "02/09/2022"
▿ day : Optional<String>
- some : "Fri"
▿ 2 : CoverRequestArray
▿ date : Optional<String>
- some : "03/09/2022"
▿ day : Optional<String>
- some : "Sat"
▿ 2 : 2 elements
- key : "siteId"
- value : 440
你為什么不嘗試像這樣解碼:
在您的文件中但在您的結構之外添加:
typealias CoverCheck = [CoverCheckForDay]
並像這樣解碼:
AF.request(requestURL, method: .get)
.response{ response in
switch response.result {
case .success(let data):
let newJSONDecoder = JSONDecoder()
if let result = try? newJSONDecoder.decode(CoverCheck.self, from: data!){
print(result)
}
case .failure(let error):
print(error)
}
}
您的 output 是一個空字符串,您的自定義奇數故障值。
問題是對success
案例的處理是錯誤的。
.success
有一個非可選的關聯值,例如.failure
,它是解碼后的 object。
將代碼更改為類似
.responseDecodable(of: [CoverCheckForDay].self) { response in
switch response.result {
case .success(let coverCheckArray):
success(coverCheckArray)
所以伙計們的問題是在服務器端我猜是錯誤的方法。 后端開發人員使用輸入數據主體執行 GET 方法。 Web 表示,從 2019 年開始,Apple 違反了使用 GET 發送正文數據。
感謝大家的回答,所以在某些情況下,我沒有先檢查這個是我的失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.