【发布时间】:2017-11-26 16:23:47
【问题描述】:
我正在使用带有 JSON 数据的 Swift 4 Codable 协议。我的数据被格式化为在根级别有一个键,其对象值包含我需要的属性,例如:
{
"user": {
"id": 1,
"username": "jdoe"
}
}
我有一个User 结构可以解码user 键:
struct User: Codable {
let id: Int
let username: String
}
由于id 和username 是user 的属性,而不是在根级别,我需要像这样创建一个包装器类型:
struct UserWrapper: Codable {
let user: User
}
然后我可以通过UserWrapper 解码JSON,User 也被解码。看起来有很多冗余代码,因为我需要对我拥有的每种类型都进行额外的包装。有没有办法避免这种包装模式或更正确/优雅的方式来处理这种情况?
【问题讨论】:
-
我还没有深入了解
Codable协议,但我认为最快的方法是直接使用内部字典初始化User对象。您可以通过从字典中访问userDicitonary将其从用户字段中取出吗? -
如果你的 JSON 只包含单个用户的数据,你真的需要用户键和用户字典作为值吗?仅仅拥有用户字典还不够吗?上下文不应该表明 JSON 描述的是用户吗?
-
@Palle 不幸的是,您并不总是可以选择需要处理的数据格式。
标签: json swift deserialization swift4 codable