Ios 使用Codable解析JSON,swift 4

Ios 使用Codable解析JSON,swift 4,ios,json,swift,swift4,codable,Ios,Json,Swift,Swift4,Codable,我使用swift4和Codables解析JSON 以下是我的JSON: { "data": { "email": "testuser14324@testuser.com", "cityUserId": 38, "CityUser": { "isEmailVerified": false, "UserId": 711 }, "tokenInfo":

我使用swift4和Codables解析JSON

以下是我的JSON:

{
    "data": {
        "email": "testuser14324@testuser.com",
        "cityUserId": 38,        
        "CityUser": {
            "isEmailVerified": false,
            "UserId": 711
        },
        "tokenInfo": {
            "accessToken": "eyJsds"
        }
    },
    "error": false
}
下面是我正在使用的模型

struct RootClass : Codable {
    let data : Data?
    let error : Bool?
}
有关数据:

struct Data : Codable {

    let cityUser : CityUser?
    let cityUserId : Int?
    let email : String?
    let tokenInfo : TokenInfo?
}
城市用户:

struct CityUser : Codable {

    let userId : Int?
    let isEmailVerified : Bool?

    enum CodingKeys: String, CodingKey {
        case userId = "UserId"
        case isEmailVerified = "isEmailVerified"
    }
}
对于令牌:

struct TokenInfo : Codable {

    let accessToken : String?
}
将其解码为:

 let response = try JSONDecoder().decode(RootClass.self, from: resJson as! Data)
问题:

response.data?.email = testuser14324@testuser.com
response.data?.tokenInfo?.accessToken = eyJsds
response.data?.cityUser = nil

它返回的是正确的电子邮件、cityUserId、tokenInfo.accessToken,但它返回的是“城市用户”的“nil”。我该怎么办?

这是声明所有内容都是可选的最大缺点。你得到了
nil
,但你不知道,为什么也许这就是你要找的,如果我想通过codables解析,我用它来解析。当然,您也可以自己编写和编辑上述工具提供的模型。推荐的解决方案是后者:更改
CodingKey
s值以匹配属性,而不是相反。(请记住,您还必须提供其他编码键以匹配其余属性。)@Itaferber我知道,我只想指出大写/小写不匹配。我更新了答案。@vadian在
CodingKey
中需要带什么
CityUser
。你能告诉我吗?或者在哪种情况下,我们必须在
CodingKey
中使用实体,如果您指定
CodingKey
,例如,要将一个键映射到另一个命名属性,您必须添加所有其他要进行en-/decoded的键。@abecardiopoint是的,它是。