提问人:Aber R 提问时间:3/16/2022 最后编辑:Aber R 更新时间:3/17/2022 访问量:244
如何在发布http请求但没有引号的情况下解码Json结果?
How to decode a Json result after Post http request but with no quotation marks?
问:
在此 HTTP 请求和结构一起之后:
struct LoginDataModel : Codable {
let token: String
let uid: String
enum CodingKeys: String, CodingKey {
case token = "token"
case uid = "uid"
}
}
func LoginRequest() {
// declare the parameter as a dictionary that contains string as key and value combination. considering inputs are valid
let parameters:Dictionary<String, Any> = [
"data" : [
"email" : email,
"password" : password,
"token" : token,
]
]
// create the url with URL
let url = URL(string: "myUrl")! // change server url accordingly
// create the session object
let session = URLSession.shared
// now create the URLRequest object using the url object
var request = URLRequest(url: url)
request.httpMethod = "POST" //set http method as POST
request.httpBody = parameters.percentEncoded()
// add headers for the request
request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") // change as per server requirements
request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept")
do {
// convert parameters to Data and assign dictionary to httpBody of request
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
print(error.localizedDescription)
return
}
// create dataTask using the session object to send data to the server
let task = session.dataTask(with: request) { data, response, error in
if let error = error {
print("Post Request Error: \(error.localizedDescription)")
return
}
// ensure there is valid response code returned from this HTTP response
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode)
else {
print("Invalid Response received from the server")
return
}
// ensure there is data returned
guard let responseData = data else {
print("nil Data received from the server")
return
}
do {
// create json object from data or use JSONDecoder to convert to Model stuct
if let jsonResponse = try JSONSerialization.jsonObject(with: responseData, options: .mutableContainers) as? Dictionary<String,Any>{
print(jsonResponse)
let decoder = JSONDecoder()
do {
let loginResponse = try decoder.decode(LoginDataModel.self, from: responseData)
AuthenticationManager.shared.saveToken(loginDataModel: loginResponse)
AuthenticationManager.shared.saveUid(loginDataModel: loginResponse)
print("Users list :", loginResponse.uid )
} catch {
print(error)
}
// handle json response
} else {
print("data maybe corrupted or in wrong format")
throw URLError(.badServerResponse)
}
} catch let error {
print(error.localizedDescription)
}
}
// perform the task
task.resume()
}
我在终端中得到了这个回复:
["response": {
token = "eyJhbGciOiJSUzI1NiIsImtpZCI6InRCME0yQSJ9.eyJpc3MiOiJodHRwczovL3Nlc3Npb24uZmlyZWJhc2UuZ29vZ2xlLmNvbS9zcGFjZS1ib29rLTRmMTgwIiwiYXVkIjoic3BhY2UtYm9vay00ZjE4MCIsImF1dGhfdGltZSI6MTY0NzQxNTEyMCwidXNlcl9pZCI6IkY0UjZWQXhJZVhNU2VJc1JQdkZxQlFPQWxWSTIiLCJzdWIiOiJGNFI2VkF4SWVYTVNlSXNSUHZGcUJRT0FsVkkyIiwiaWF0IjoxNjQ3NDE1MTIwLCJleHAiOjE2NDc4NDcxMjAsImVtYWlsIjoiYXJAeTc2LmlvIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsiYXJAeTc2LmlvIl19LCJzaWduX2luX3Byb3ZpZGVyIjoicGFzc3dvcmQifX0.U1buRHJstnwCNHjn4dDhwMRwm-Or6FF-F4KeO_GNQpox0IPCVFsdd_ko0lyXIle34Hs0pFDn-gEUe-VA9hXb96afnEZbiBkf-2ef_sOSwt6hEbW53vNbk784ws8dC340rSemV4HUwwN_PNZswXcXR_tdKFqVAGWJE3yKOu9KOcrcDtzNQWoE_Kf2LDLNEWkWW_uS7CQ3mjF9QvTt9-y80qCd-SKsv0OVoRdN4LTHcoFG-x6sCb5QkiO1ZJ6Z2cnO1yE4-RB0z0XGCH6Mnqi_iQtPBsmcGRUw3Ku7XuFaI7M9YnhUFeW6nfc3d5q6LpjvLV2wSXh3D0JRsIRiN-yEYw";
uid = F4R6VAxIeXMSeIsRPvFqBQOAlVI2;
}]
但这个回答是 ((((unquoted)))) !我怎样才能解析这个响应,以便我可以保存UID和令牌,稍后在应用程序中使用它们,我需要一种方法来解析它,请找不到一种方法来做到这一点!非常感谢你
答:
1赞
workingdog support Ukraine
3/16/2022
#1
根据您显示的响应,您应该对此进行解码:
let loginResponse = try decoder.decode(LoginResponse.self, from: responseData)
您声明的位置:
struct LoginResponse : Codable {
let response: LoginDataModel
}
评论
0赞
Aber R
3/16/2022
如果我想保存值 uid 以供以后在视图中使用,您有什么建议?因为它正在解码但尚未显示
0赞
workingdog support Ukraine
3/17/2022
阅读,如何设置这样的类,如何使用它并使用 or 传递它。ObservableObject
StateObject
ObservedObject
EnvironmentObject
评论