मैं एक JSON प्रतिक्रिया को डीकोड करने और हर बार त्रुटि प्राप्त करने का प्रयास कर रहा हूं। मैंने ऑनलाइन टूल से मॉडल क्लास बनाने की भी कोशिश की लेकिन यह इसे स्विफ्ट मॉडल क्लास में डीकोड नहीं करता है। जब मैंने स्थानीयकृत विवरण मुद्रित किया तो यह बताता है कि दिया गया डेटा सही प्रारूप में नहीं है। नीचे मेरा मॉडल वर्ग है। जहां त्रुटि कहती है

Swift.DecodingError.typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "ResponseDescription", intValue: nil)], debugDescription: "डिक्शनरी को डिकोड करने की उम्मीद है लेकिन इसके बजाय एक स्ट्रिंग/डेटा मिला।", अंतर्निहित त्रुटि: शून्य))

मॉडल क्लास

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
}

किसी भी तरह की मदद से मैं इस समस्या में अपनी गलती बता सकता हूं।

-2
Mujhtuba Khan 14 फरवरी 2020, 10:24
1
firstName फ़ील्ड मान में json प्रतिक्रिया गलत है, आपको " Haris . से पहले जोड़ना चाहिए
 – 
Mac3n
14 फरवरी 2020, 10:29
1
इसके बजाय print(error.localizedDescription) केवल error इंस्टेंस प्रिंट करें। यह आपको बताता है कि वास्तव में क्या गलत है और यहां तक ​​कि कहां। ResponseDescription में एक गलत प्रकार है
 – 
vadian
14 फरवरी 2020, 10:30
जैसा कि मैक3एन कहता है कि हारिस की शुरुआत में "एक लापता" है, और आपको इस साइट को आजमाना चाहिए app.quicktype.io
 – 
Sahil
14 फरवरी 2020, 10:33
JSON पोस्ट करते समय यह एक टाइपो था, कृपया अद्यतन प्रश्न देखें
 – 
Mujhtuba Khan
14 फरवरी 2020, 10:34
आपकी ResponseDescription संरचना आपकी ResponseLogin संरचना से बाहर होनी चाहिए।
 – 
Mac3n
14 फरवरी 2020, 10:36

2 जवाब

टाइपियास कोडेबल = एनकोडेबल और डिकोडेबल

जो एनकोडेबल और डिकोडेबल दोनों के अनुरूप है।

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/encodeable-and-decodeable-in-swift-4-747328a7c7c5

4
rahul 14 फरवरी 2020, 12:57
2
यह मज़ेदार है, प्रश्न Encodable से बिल्कुल भी संबंधित नहीं है और दोनों संरचनाएँ प्रश्न में JSON और मॉडल से बिल्कुल भी संबंधित नहीं हैं।
 – 
vadian
14 फरवरी 2020, 14:24
क्या आप अपने उत्तर की व्याख्या कर सकते हैं और यह समस्या को हल करने में कैसे मदद करता है?
 – 
Joakim Danielson
15 फरवरी 2020, 19:15

ये कोशिश करें!

class Welcome: Codable {
    let status: Bool
    let message: String
    let responseDescription: ResponseDescription
    let encryptStatus: Bool

    enum CodingKeys: String, CodingKey {
        case status = "Status"
        case message = "Message"
        case responseDescription = "ResponseDescription"
        case encryptStatus = "EncryptStatus"
    }

    }
   class ResponseDescription: Codable {
    let id, customerWebID, customerWalletID: Int
    let cellNo, firstName, lastName, email: String
    let sahulatWalletCard, city: String
    let regionID: Int
    let address: String
    let profilePicture: String
    let tokenNo: String
    let responseStatus: Bool
    let responseMessage: String


}
-1
Tanjima Kothiya 14 फरवरी 2020, 10:49
1
कोड केवल उत्तरों को हतोत्साहित किया जाता है, कोड की व्याख्या करें और यह समस्या को कैसे हल करता है।
 – 
Joakim Danielson
14 फरवरी 2020, 10:52