json - 使用 Codable 解析 JSON 数据
问题描述
我在可编码模型的帮助下解析了一个 JSON 响应。尽管我的模型看起来不错,但我收到以下错误,
失败:typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: “data”, intValue: nil)
JSON 响应是:
{
"status": "success",
"message": "successfully.",
"user": {
"username": "admin",
"profileImage": "/storage/default.png"
},
"data": {
"cash": {
"withdrawableCash": "$99999910",
"outstandingOrders": "$0"
},
"offering": [
{
"company": "TSLA",
"location": "Location",
"amount": 40
},
{
"company": "TSLA",
"location": "Location",
"amount": 50
}
],
"history": [
{
"amount": 100000000,
"order_id": 0,
"order_type": "deposit",
"status": 1,
"message": "Added money into wallet",
"transaction_time": "30-07-2018 18:10"
},
{
"amount": 40,
"order_id": 1,
"order_type": "auctionBid",
"status": 2,
"message": "Placed bid with 4 notes, on Auction (TSLA)",
"transaction_time": "30-07-2018 18:11"
},
{
"amount": 50,
"order_id": 2,
"order_type": "auctionBid",
"status": 2,
"message": "Placed bid with 5 notes, on Auction (TSLA)",
"transaction_time": "30-07-2018 18:11"
}
]
}
}
这些型号是:
public struct WalletResponseModel: Codable {
public let status: String
public let message: String
public let user: UserData
public let data: WalletData
}
public struct UserData: Codable {
public let username: String
public let profileImage: URL
enum CodingKeys: String, CodingKey {
case username
case profileImage = "profileImage"
}
}
public struct WalletData: Codable {
public let cash: Cash
public let history: [HistoryItem]
public let offerings: [Offering]
enum CodingKeys: String, CodingKey {
case cash
case history
case offerings = "offering"
}
}
public struct Cash: Codable {
public let withdrawableCash: String
public let outstandingOrders: String
}
public struct HistoryItem: Codable {
public let amount: Int
public let status: Int
public let orderId: Int
public let orderType: String
public let message: String
public let transactionTime: String
enum CodingKeys: String, CodingKey {
case amount, status, message
case transactionTime = "transaction_time"
case orderId = "order_id"
case orderType = "order_type"
}
}
public struct Offering: Codable {
public let company: String
public let amount: Int
public let location: String
}
解决方案
我没有看到错误。但是以前当我遇到类似的问题时,我从一只小手开始,里面装满了数据和模型中的元素并进行了测试。一次添加一两个,直到发生错误并且可以找到问题。
推荐阅读
- facebook - iOS 13/Facebook SDK 错误“无法找到有效的 UIWindow”
- vb.net - 我在弄清楚如何在数组中打印时遇到问题
- c# - Issue with find and replace apostrophe( ' ) in a Word Docx using OpenXML and Regex
- sql - In proc sql when using SELECT * and GROUP BY, the result is not collapsed
- android-studio - Not recieving any response from Volley
- powershell - Count the scale of a given decimal
- ios - Is there any way to get the key type of a SecKey?
- bash - Using bash, how to pass filename arguments to a command sorted by date and dealing with spaces and other special characters?
- xamarin - Xamarin UI Test - will not run tests from Visual Studio for Mac
- sql - 将名称添加到周列表