ios 从 json urlsession dataTask 获取可解码对象参数
ios get decodable object parameter from json urlsession dataTask
从 URLSession dataTask 的这个响应中,我如何转置收到的数据:
response: {"message":"login successful","data":{"id":15,"username":"Dummy2","password":"1234","email":"Dummy2@gmail.com","createdAt":"2017-12-23T19:52:49.547Z","updatedAt":"2017-12-23T19:52:49.547Z"}}
到这个结构使用语句
struct User : Codable{
var id: String
var username: String
var password: String
var email: String
var createdAt: String
var updatedAt: String
}
let user = try decoder.decode(User.self, from: jsonData)
它属于数据类型,但我只需要一个数据 table,不需要两者,而且我无法下标接收到的 jsonData。
我无法获得 from: 参数的正确格式 我知道使用 REST API 和 JSON 并且真的可以使用帮助。谢谢
您需要一个 struct
用于包含 message
和 type
的对象来包装此响应,例如ResponseObject
:
struct User: Codable {
let id: Int // NB: You must use `Int` not `String`
let username: String
let password: String
let email: String
let createdAt: Date // NB: I'd use `Date`, not `String`
let updatedAt: Date
}
func parserUser(from data: Data) -> User? {
struct ResponseObject: Decodable {
let message: String
let data: User?
}
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
formatter.locale = Locale(identifier: "en_US_POSIX")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)
let responseObject = try? decoder.decode(ResponseObject.self, from: data)
return responseObject?.user
}
let user = parseUser(from: data)
注意,这个 ResponseObject
不需要在全局范围内,因为它只需要解析这个特定的请求。将它放在最适合您的应用程序的最窄范围内(可能只是在函数中。
从 URLSession dataTask 的这个响应中,我如何转置收到的数据:
response: {"message":"login successful","data":{"id":15,"username":"Dummy2","password":"1234","email":"Dummy2@gmail.com","createdAt":"2017-12-23T19:52:49.547Z","updatedAt":"2017-12-23T19:52:49.547Z"}}
到这个结构使用语句
struct User : Codable{
var id: String
var username: String
var password: String
var email: String
var createdAt: String
var updatedAt: String
}
let user = try decoder.decode(User.self, from: jsonData)
它属于数据类型,但我只需要一个数据 table,不需要两者,而且我无法下标接收到的 jsonData。 我无法获得 from: 参数的正确格式 我知道使用 REST API 和 JSON 并且真的可以使用帮助。谢谢
您需要一个 struct
用于包含 message
和 type
的对象来包装此响应,例如ResponseObject
:
struct User: Codable {
let id: Int // NB: You must use `Int` not `String`
let username: String
let password: String
let email: String
let createdAt: Date // NB: I'd use `Date`, not `String`
let updatedAt: Date
}
func parserUser(from data: Data) -> User? {
struct ResponseObject: Decodable {
let message: String
let data: User?
}
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
formatter.locale = Locale(identifier: "en_US_POSIX")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)
let responseObject = try? decoder.decode(ResponseObject.self, from: data)
return responseObject?.user
}
let user = parseUser(from: data)
注意,这个 ResponseObject
不需要在全局范围内,因为它只需要解析这个特定的请求。将它放在最适合您的应用程序的最窄范围内(可能只是在函数中。