首页 > 解决方案 > 尝试将 Json 数据解析到模型类中,使用可编码时出现错误

问题描述

试图将 Json 数据解析为模型类“TimeSheetModel”我遇到了错误。

typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "error", intValue: nil)], debugDescription: "期望解码字符串,但找到了字典。",underlyingError: nil))

响应数据 Json

{
    "code": 200,
    "message": null,
    "error": null,
    "data": {

    }
}

// MARK: - TimeSheetModel

struct TimeSheetModel: Codable {
    
    let code: Int?
    let message: String?
    let error: String?
    let timeSheetModel_Data: TimeSheetModel_Data?

    enum CodingKeys: String, CodingKey {

        case code = "code"
        case message = "message"
        case error = "error"
        case timeSheetModel_Data = "data"

    }

    init(from decoder: Decoder) throws {

        let values = try decoder.container(keyedBy: CodingKeys.self)
        code = try values.decodeIfPresent(Int.self, forKey: .code)
        message = try values.decodeIfPresent(String.self, forKey: .message)
        error = try values.decodeIfPresent(String.self, forKey: .error)
        timeSheetModel_Data = try values.decodeIfPresent(TimeSheetModel_Data.self, forKey: .timeSheetModel_Data)


    }
}

可能我必须处理是否在可编码模型类中对字符串和 Int 进行编码。

标签: iosswiftcodable

解决方案


正如错误所说:let error: String?错误属性应该是一种String类型 - 但服务器在Dictionary那里返回一个。

您发布的 JSON 似乎在null那里,但由于不同的 JSON 数据可能会显示错误 - 一个有error对象。


推荐阅读