如何快速在模型中存储 JSON 响应

编程入门 行业动态 更新时间:2024-10-17 18:25:22
本文介绍了如何快速在模型中存储 JSON 响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经为 loginviewcontroller 响应创建了模型

I have created model for loginviewcontroller response

我收到如下响应,如何在 loginviewcontroller 中向此模式添加值.. 我收到此响应的位置

I am getting response like below, how to add values to this mode in loginviewcontroller.. where i am getting this response

struct Employees: Codable { let jsonrpc: String let result: Result } // MARK: - Result struct Result: Codable { let userdata: Userdata let token: String } // MARK: - Userdata struct Userdata: Codable { let id: Int let fname, lname, email: String ....... }

loginviewcontroller APICall:

loginviewcontroller APICall:

func loginService(){ let url = URL(string: "apkool")! var request = URLRequest(url: url) request.httpMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") let jsonpost = LoginData(jsonrpc: "2.0", params: (PostLogin(email: nameTf.text!, password: passwordTf.text!, device_id: "2"))) do { let jsonBody = try JSONEncoder().encode(jsonpost) request.httpBody = jsonBody } catch { print("Error while encoding parameter: \(error)") } let session = URLSession.shared let task = session.dataTask(with: request) { [self] (data, response, error) in guard let data = data else {return} do{ let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] print("the json output \(String(describing: json))") let error = json!["error"] as? [String : Any] let status = error?["status"] as? [String : Any] DispatchQueue.main.sync{ if error != nil{ let controller = UIAlertController(title: "Alert", message: "Your email is not verified", preferredStyle: .alert) let ok = UIAlertAction(title: "OK", style: .default, handler: nil) let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) controller.addAction(ok) controller.addAction(cancel) self.present(controller, animated: true, completion: nil) } else{ let res = json?["result"] as? [String : Any] let uData = res?["userdata"] as? [String : Any] var nameLogin = uData?["slug"] as? String var emailLogin = uData?["email"] as? String print("login name \(String(describing: nameLogin))") let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "ProfileViewController1") as? ProfileViewController1 vc?.name = nameLogin vc?.email = emailLogin self.navigationController?.pushViewController(vc!, animated: true) } } print("the error is \(error)") }catch{ print("Error while decoding: \(error.localizedDescription)") } } task.resume() }

我想向模型添加登录响应,以便在另一个视图控制器中使用这些值..请帮忙..我被困在这里很久了

i want to add login response to model to use these values in another viewcontroller.. pls do help.. i got stuck here from long time

对于上述 api,我收到登录响应:

for above api i am getting response for login:

{ "jsonrpc": "2.0", "result": { "userdata": { "id": 47, "fname": "sample", "lname": "test", "last_login": "2021-02-23 15:04:56", "created_at": "2021-02-17 20:22:49", "updated_at": "2021-02-23 15:04:56", "deleted_at": null }, "devicetoken": fasfcsdfdsfsdfsd } }

推荐答案

因为您可能会从服务器收到这样的错误:

Since you may get an error from the server like so:

{ "jsonrpc": "2.0", "error": { "status": { "code": "-32706", "message": "Not Verified", "meaning": "Your email is not verified." } } }

改变你的模型:

struct Employees: Codable { let jsonrpc:String let result:Result? let error:ResponseError? } struct ResponseError:Codable { let status:ErrorStatus } struct ErrorStatus:Codable { let code:String? let message:String? let meaning:String? } // MARK: - Result struct Result: Codable { let userdata: Userdata let token: String } // MARK: - Userdata struct Userdata: Codable { let id: Int let fname, lname, slug, email: String ...... //IMPORTANT: MAKE SURE YOUR CONSTANT NAMES ARE EXACTLY THE SAME AS YOUR //RESPONSE, OTHERWISE YOU MUST ADD AN ENUM like so: private enum CodingKeys: String, CodingKey { case firstName = "fname" }

然后在你的 api

func loginService(){ let url = URL(string: "appleskool/preview/appleskool_code/api/login")! var request = URLRequest(url: url) request.httpMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") let jsonpost = LoginData(jsonrpc: "2.0", params: (PostLogin(email: nameTf.text!, password: passwordTf.text!, device_id: "2"))) let session = URLSession.shared let task = session.dataTask(with: request) { [self] (data, response, error) in guard let data = data else {return} let decoder = JSONDecoder() guard let employees = try? decoder.decode(Employees.self, from: data) else { return } //then you can access your result if let error = employees.error { //use your error print(error.status.message) print(error.status.meaning) }else{ //use your data guard let user = employees.result else {return } print(user.userdata.fname) print(user.userdata.lname) print(user.userdata.email) print(user.userdata.slug) // or your can do what you already doing in your code let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "ProfileViewController1") as? ProfileViewController1 vc?.name = ser.userdata.fname vc?.lastName = ser.userdata.lname //if you want to pass the token vc?.token = user.token self.navigationController?.pushViewController(vc!, animated: true) // etc } } task.resume() }

更多推荐

如何快速在模型中存储 JSON 响应

本文发布于:2023-11-26 20:44:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635129.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模型   快速   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!