首页 > 解决方案 > 使用 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
}

标签: jsonswiftalamofirecodable

解决方案


我没有看到错误。但是以前当我遇到类似的问题时,我从一只小手开始,里面装满了数据和模型中的元素并进行了测试。一次添加一两个,直到发生错误并且可以找到问题。


推荐阅读