Ich versuche, eine Login-Funktion (POST-Methode) zu erstellen und das Ergebnis ist ein JSON mit Benutzerdetails und einige andere Details. Ich habe eine Klasse mit allen Feldern erstellt, die ich aus dem Ergebnis des POST-Aufrufs verwenden muss. Aber ich habe ein Problem damit, den JSON zum Objekt der Klasse zu deserialisieren. Kann mir jemand dabei helfen? (. Ich habe auf SO ähnliche Fragen gesehen und versuchte, die Lösung unter Verwendung der Lösung Ich habe versucht, die json string Umwandlung und dann zu schnelles Objekt mit var UserDetails = UserDetails(json:jsonString)
)Deserialize ein Wörterbuch (JSON) zu einem schnellen Objekt
Mein Code:
class UserDetails {
let token:String
let agent_id: Int
let user_id:Int
let company_id:Int
let affliate_Id:Int
let role_id:Int
let username: String
let surname:String
let lastname:String
init(token:String,agent_id: Int,user_id:Int,company_id:Int,affliate_Id:Int,role_id:Int,username: String,surname:String,lastname:String) {
self.token = token;
self.agent_id = agent_id;
self.user_id = user_id;
self.company_id = company_id;
self.affliate_Id = affliate_Id;
self.role_id = role_id;
self.username = username;
self.surname = surname;
self.lastname = lastname;
} }
Mein Controller-Klasse:
let task = session.dataTask(with: request as URLRequest) { data, response, error in
guard data != nil else {
print("no data found: \(error)")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
NSLog("Login SUCCESS");
let prefs:UserDefaults = UserDefaults.standard
prefs.set(username, forKey: "USERNAME")
prefs.set(udid, forKey: "UDID")
prefs.synchronize()
print("Response: \(json)")
//var jsonString = NSString(data: json, encoding: String.Encoding.utf8)! as String
//when I tried to do the above statement, an error is thrown. Cannot convert value of type NSDictionary to expected argument type Data
//var person:UserDetails = UserDetails(json: jsonString)
self.dismiss(animated: true, completion: nil)
} else {
let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)// No error thrown, but not NSDictionary
print("Error could not parse JSON: \(jsonStr)")
}
} catch let parseError {
print(parseError)// Log the error thrown by `JSONObjectWithData`
let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("Error could not parse JSON: '\(jsonStr)'")
}
}
task.resume()
JSON Antwort:
{
"user": {
"token": "ABCDEFGHI",
"agent_id": 0,
"user_id": 151,
"company_id": 1,
"affiliate_Id": 0,
"role_id": 1,
"username": "testman1",
"surname": "Test",
"lastname": "man",
},
"menu": [
{ .....
Kann jemand mir helfen, dieses zu lösen. Tia
Fügen Sie Ihre JSON-Antwort hier in Frage. –
@NiravD hat die Frage mit der JSON-Antwort aktualisiert. Bitte werfen Sie einen Blick auf – ASN
Sie sollten vermeiden, Foundation-Klassen (NSDictionary etc.) zu verwenden und Swift-Typen verwenden. Also, 'wenn json = JSONSerialization.jsonObject ausprobieren (mit: data !, options: []) als? [String: Any] ' – Paulw11