iOS JSON解码数字类型错误

时间:2018-06-05 01:04:33

标签: json swift api decodable

我遇到了从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;

这不是我将在这个特定的应用程序中使用的字段,但如果这个问题再次发生,我想在它重要之前找到它的解决方案。

1 个答案:

答案 0 :(得分:0)

哦,没关系。 isFutureDated 应该是布尔值,而不是任何类型的数字。即,

let isFutureDated: Bool?

怪异。