首页 > 解决方案 > 在将 json 解码为 swift 模型类时出错

问题描述

我正在尝试解码 JSON 响应并每次都收到错误。我还尝试从在线工具制作模型类,但它没有将其解码为 swift 模型类。当我打印本地化描述时,它表明给定的数据格式不正确。下面是我的模型课。正如错误所说

Swift.DecodingError.typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "ResponseDescription", intValue: nil)], debugDescription: "预期解码 Dictionary 但找到了一个字符串/数据。",基础错误:无))

模型类

struct ResponseLogin: Decodable{
    let Status:Bool
    let Message: String
    let ResponseDescription: ResponseDescription
    let EncryptStatus: Bool

    struct ResponseDescription: Decodable{
        let ID:Int
        let CustomerWebID: Int
        let CustomerWalletID: Int
        let CellNo: String
        let FirstName: String
        let LastName: String
        let Email: String
        let SahulatWalletCard: String
        let City: String
        let Address: String
        let ProfilePicture: String
        let TokenNo: String
        let ResponseStatus: String
        let ResponseMessage: String
    }
}

JSON 响应

{
"Status": true, 
"Message":"Login Successfully", 
"ResponseDescription":
{
"ID": 1459,
"CustomerWebID": 6275, 
"CustomerWalletID": 321123,
"CellNo": "0332334001",
"FirstName": "Haris",
"LastName": "Khan",
"Email": "myemail@gmail.com", 
"SahulatWalletCard": "3085040101018537", 
"City": "Karachi",
"RegionID": 1,
"Address": "Test1",
"ProfilePicture": "http://images/mypic.png", 
"TokenNo": "Xxxx==2121mcmvjmdx!", 
"ResponseStatus": true, 
"ResponseMessage": "Data Found"
},
"EncryptStatus": true
}

Decrypted JSON
{
  "Status": true,
  "Message": "Login Successfully",
  "ResponseDescription":"Qmw25wKdmOpbUxP3pMRGnVP9yHcsJhVISyA6s3oBHrkpGsAlbR27xsbcsZqXd0z3A6h1tB1i/sOZFuZaMTNMBTevq3N7xG8KBw50WauLDHFqJ4JbAkh6RKUPOLcpmdIrEZ2jgfJrA+dNrftbjIjnEohg4jF/oLDKs7sjE1Ozk/3C1JnFTHNnc5vSrQNNUUOzrB4+QOxMGqpdNrF4BCh7YQ9xT1w/8D3BNM/7LXhb5txqbCEdRI7yf6R+tw5Mey4NR6NXAYdfGCnWKLsrnU2FwTKKRG2PqBZ7hLa2Ee8Uva0OAStvkldMWs8Heh9oS8T3Z39goyxFJme3N7x9JRzZyHmTbc6JqPI2kwWDwYztxxK6bft4tXwumPjJHx91ScNm2JCLQworqvlyHeOa8oBoXK6xym/PrAPCJ3Mwa3MHXhrU8U8mONFmtp3zZdPyXmHayE6E9meZtxbABEihBkOra4257s5rF3Zyr8WtHbwXYMA1dDF/lESwjiyG9Q/KHHgem8QyB3P9xSVi5vKqfFnqZfBusYTMNqDF+V8C2L9YjEp2bdyq7lUPEu0jWMRqpYDyAO+Z864cwbnb0V1fEfE3xI7Z8/PqlQ5hp7mR5VwL4k6pekagZDNXKo4qOTy6PGsod0x7KY0bLddL6qv1MrcyzcH7K1016fy5R/3DemkAmXn0/d6OleVHDr8zpC9D4ZZrY8JghRCA7Vb/b5itX9VC41dL/3PcZBbXsiOFnnJmr/2zNj6QXBK4+b/S42Wh2vBK",
"EncryptStatus": true
}

任何帮助都可以让我指出我在这个问题上的错误。

标签: jsonswift

解决方案


typealias Codable = 可编码 & 可解码

它同时符合 Encodable 和 Decodable。

struct MovieDetail: Codable {
    var language: String
    var genre: String
    var releaseDate: String
    var bannerImageUrl: String
}

struct Movie: Codable {
    var movieId: Int
    var name: String
    var movieDetails: MovieDetail
}

[更多详情]

https://medium.com/@manojkarkie/encodable-and-decodable-in-swift-4-747328a7c7c5


推荐阅读