在Swift 5中使用JSONDecoder()。decode解码API响应后,自定义数据模型中的字段为“ nil”

时间:2019-12-25 15:48:52

标签: swift jsondecoder

我已经在Swift中为用户对象定义了自定义数据模型,如下所示: user data model

我有一个从API提取用户数据的函数,如下所示: get data from api

以下是使用Postman调用同一终结点时的响应: api response

这是函数第75行的控制台调试输出,表明我实际上正在接收该数据:debug output

据我所知,一切看起来都不错。 然后,我使用JSONDecoder()。decode解码从api接收到的jsonData,对此我没有任何错误。但是,当我从返回的用户对象中打印一个字段时,该字段(以及所有其他字段)均为“ nil”:all fields in user object are nil

我确定这是个小而愚蠢的东西,但是我已经花了几个小时,无法弄清楚它是什么。谁能发现错误,让我知道我在做什么错?

帮助非常感谢!

1 个答案:

答案 0 :(得分:1)

对于 Codable ,您需要为json键赋予相同的属性名称。并确保它在正确的范围内。例如,您通过电子邮件发送detailresponse json对象内部的属性和detailresponse主json对象内部的属性。如果您不想再增加任何类,则需要使用它的 init 容器方法。

class Response: Codable {
    var statuscode: Int?
    var response_type: Int?
    // Other properties
    var detailresponse: DetailResponse?
}

class DetailResponse: Codable {
    var id: Int?
    // Other properties
    var socialmediadata: User?
}

class User: Codable {
    var id: Int?
    var email: String?
    // Other properties
}

现在,json将像这样进行解析。

let response = try JSONDecoder().decode(Response.self, from: jsonData)
print(response.detailresponse?.socialmediadata?.email ?? "")