我在从 API 的 JSON 响应解码银行信息时遇到问题。
以下是我的数据结构的相关部分。我创建了 TransactionResponse 对象来简化从响应中提取相关数据的过程:
struct Transaction: Decodable {
... // other properties, not relevant to this
let isFutureDated: Float? /
... // see above ___________/
}
struct TransactionResponse: Decodable {
let response: Response?
struct Response: Decodable {
...
let transactions: [Transaction]?
}
}
以及我从 JSON 数据对象的转换:
do {
let transactions = try JSONDecoder().decode(TransactionResponse.self, from: data)
} catch let localError {
print(localError)
}
如果我注释掉isFutureTDate属性,对象加载得很好(还有大约十几个其他属性,所以它不仅仅是成功加载了任何:P(。当我在数据结构中包含isFutureTDate属性时,我发现以下错误:
typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "response", intValue: nil(, CodingKeys(stringValue: "transactions", intValue: nil(, _JSONKey(stringValue: "Index 0", intValue:0(, CodingKeys(stringValue: "isFutureDated", intValue: nil(], debugDescription:"预期解码 Float 但找到了一个数字。
我错过了什么吗?浮点数不是数字吗?我还尝试将isFutureDated的类型更改为Double,Int,Int8,Int16,Int 32,Int64,UInt,UInt8...你明白了。甚至数据和字符串。总是相同的错误,将Float部分换成它期望的任何类型。
最后要注意的是,响应对象中的实际 JSON 字段如下所示:
isFutureDated = 0;
这不是我要在这个特定应用程序中使用的字段,但如果这个问题再次发生,我想在它计数之前找到解决方案。
哦,没关系。isFutureDate应该是一个布尔值,而不是任何类型的数字。即,
let isFutureDated: Bool?
奇怪。