[英]Swift Codable / Decodable with Nested json Array
我是 swift 的新手,我正在嘗試通過嵌套 Json。 到目前為止,我已經嘗試過 JSONSerialization,但沒有成功,但在被建議切換到 Codable 之后,我試了一下,但我一直從解析的 JSON 中得到零。 我到目前為止的代碼:
struct AppData: Codable {
let paymentMethods: [PaymentMethods]?
}
struct PaymentMethods: Codable {
let payment_method: String?
}
AF.request(startAppUrl, method: .post, parameters: requestParams , encoding: JSONEncoding.default).responseString{
response in
switch response.result {
case .success(let data):
let dataStr = data.data(using: .utf8)!
let parsedResult = try? JSONDecoder().decode( AppData.self, from: dataStr)
print(parsedResult)
case .failure(let error):
print((error.localizedDescription))
}
}
我的 JSON 數據可以在這里找到: https://startv.co.tz/startvott/engine/jsonsample/ 。 我正在使用 xcode 11
我將感謝您的幫助,因為它已經堅持了一周。
首先在請求行中將responseString
替換為responseData
,這樣可以避免將字符串(返回)轉換為數據的額外步驟。
其次,始終在JSONDecoder
行周圍添加一個do - catch
塊。 永遠不要忽略try?
. 該塊將捕獲這個全面的DecodingError
:
typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "paymentMethods", intValue: nil)], debugDescription: "期望解碼 Array 但找到了一個字符串/數據。",底層錯誤: nil) )
該錯誤表明鍵paymentMethods
的值不是數組。 這是一個字符串。 查看 JSON 它實際上是一個嵌套的 JSON 字符串,必須在第二級解碼。
struct AppData: Codable {
let paymentMethods: String
}
struct PaymentMethods: Codable {
let paymentMethod: String
}
AF.request(startAppUrl, method: .post, parameters: requestParams , encoding: JSONEncoding.default).responseData{
response in
switch response.result {
case .success(let data):
do {
let parsedResult = try JSONDecoder().decode( AppData.self, from: data)
let paymentData = Data(parsedResult.paymentMethods.utf8)
let secondDecoder = JSONDecoder()
secondDecoder.keyDecodingStrategy = .convertFromSnakeCase
let paymentMethods = try secondDecoder.decode([PaymentMethods].self, from: paymentData)
print(paymentMethods)
} catch {
print(error)
}
case .failure(let error):
print((error.localizedDescription))
}
}
邊注:
URL 不需要 POST 請求和參數。 您可以省略除第一個參數之外的所有參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.