我遇到了从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)
}
如果我注释掉 isFutureDated 属性,那么对象加载就好了(还有大约十几个其他属性,所以它不仅仅是它成功加载任何东西:P)。当我在数据结构中包含 isFutureDated 属性时,我发现以下错误:
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但找到一个数字。“,underlyingError:nil))< / p>
我错过了什么吗? Float不是一个数字吗?我也尝试将 isFutureDated 的类型更改为Double,Int,Int8,Int16,Int 32,Int64,UInt,UInt8 ......你明白了。甚至数据和字符串。始终存在相同的错误,将 Float 部分换成预期的任何类型。
最后注意,响应对象的实际JSON字段如下所示:
isFutureDated = 0;
这不是我将在这个特定的应用程序中使用的字段,但如果这个问题再次发生,我想在它重要之前找到它的解决方案。
答案 0 :(得分:0)
哦,没关系。 isFutureDated 应该是布尔值,而不是任何类型的数字。即,
let isFutureDated: Bool?
怪异。