我如何将具有可解码结构的 json 数据正确传递给 UserDefaults
How I can pass json data with a decodable struct to UserDefaults properly
我是一名学生,我正在尝试从 Http 服务器获取 Json 数据,然后使用 UserDefaults
保存它
我看到了一些示例,我编写的这段代码似乎很有意义,即使它不起作用
这是我用来解码 json 数据的结构
struct UserLogged : Decodable {
var token: String
var userId: String
}
这是我正在尝试使用的代码
guard let baseUrl = URL(string: "http://LOCALHOST:8080/auth/login") else {
return
}
var request = URLRequest(url: baseUrl);
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST";
request.httpBody = jsonData;
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
print(data)
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
if let user : UserLogged = try JSONDecoder().decode(UserLogged.self, from: data) {
UserDefaults.standard.set(user, forKey: "userLogged")
}
} catch {
print(error)
}
}
}.resume()
您可以使用解码器而不是 JSONSerialization 轻松解析 json。最好将用户的令牌保存在 UserDefaults
而不是整个用户中,使用有意义的密钥,例如 userToken:
if let data = data {
print(data)
let decoder = JSONDecoder()
do {
let user = try decoder.decode(UserLogged.self, from: data)
//now you parsed the json and get token and userId
UserDefaults.standard.set(user.token, forKey: "userToken")
} catch {
//Parsing error, couldnt parse user.
}
}
我是一名学生,我正在尝试从 Http 服务器获取 Json 数据,然后使用 UserDefaults
我看到了一些示例,我编写的这段代码似乎很有意义,即使它不起作用
这是我用来解码 json 数据的结构
struct UserLogged : Decodable {
var token: String
var userId: String
}
这是我正在尝试使用的代码
guard let baseUrl = URL(string: "http://LOCALHOST:8080/auth/login") else {
return
}
var request = URLRequest(url: baseUrl);
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST";
request.httpBody = jsonData;
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
print(data)
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
if let user : UserLogged = try JSONDecoder().decode(UserLogged.self, from: data) {
UserDefaults.standard.set(user, forKey: "userLogged")
}
} catch {
print(error)
}
}
}.resume()
您可以使用解码器而不是 JSONSerialization 轻松解析 json。最好将用户的令牌保存在 UserDefaults
而不是整个用户中,使用有意义的密钥,例如 userToken:
if let data = data {
print(data)
let decoder = JSONDecoder()
do {
let user = try decoder.decode(UserLogged.self, from: data)
//now you parsed the json and get token and userId
UserDefaults.standard.set(user.token, forKey: "userToken")
} catch {
//Parsing error, couldnt parse user.
}
}