1

从 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)   

它属于数据类型,但我只需要一个数据表,而不是两者,而且我无法为收到的 jsonData 下标。我无法为 from: 参数获取正确的格式,我知道使用 REST API 和 JSON,并且可以真正使用帮助。谢谢

4

1 回答 1

0

您需要一个struct带有messagetype包装此响应的对象,例如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不是需要在全局范围内的东西,因为它只需要解析这个特定的请求。将它放在最适合您的应用程序的任何最窄范围内(可能只是在函数中。

于 2017-12-24T01:04:43.387 回答