Swift 如何使用codable为这个json创建模型
我有下面的json,我想用codable为json创建模型Swift 如何使用codable为这个json创建模型,swift,codable,Swift,Codable,我有下面的json,我想用codable为json创建模型 { id = 1; name = "abc"; empDetails = { data = [{ address = "xyz"; ratings = 2; "empId" = 6; "empName" = "def"; }]; }; } 模型 我不需要钥匙数据。我想将data的值设置为empDetails属性 如何使用in
{
id = 1;
name = "abc";
empDetails = {
data = [{
address = "xyz";
ratings = 2;
"empId" = 6;
"empName" = "def";
}];
};
}
模型
我不需要钥匙数据。我想将data
的值设置为empDetails
属性
如何使用init(from decoder:decoder)抛出
方法来实现这一点?只需创建枚举编码键
,并在结构根中实现init(from:)
即可实现该功能
struct Root: Decodable {
let id: Int
let name: String
let empDetails: [Emp]
enum CodingKeys: String, CodingKey {
case id, name, empDetails, data
}
struct Emp: Codable {
let address: String
let ratings: Int
let empId: Int
let empName: String
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
name = try container.decode(String.self, forKey: .name)
let details = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .empDetails)
empDetails = try details.decode([Emp].self, forKey: .data)
}
}
谢谢你的回答。但是检查一下我的乔森。它里面有empDetails
键和data
键。我想你的答案不会work@iOSDev对不起,误会了。我已经按照要求更新了答案。它有效。如果我们使用custominit
方法,我们就不能在init
方法中使用one属性empDetails
。如果我从init
方法中注释id=…
和name=…
,则从初始值设定项返回,但未初始化所有存储的属性。请看一看。@vadian我想您不明白我的问题。我有json格式的empDetails->data
。我不希望该数据出现在我的结构中。@vadian在我的json类型的empDetails
中是[String:Any]
,而数据的类型是[[String:Any]]
。我可以使用Root->EmpDetails->Data->[Emp]
创建嵌套结构。在这里,我想避免我的struct@vadian好啊我会检查的
struct Root: Decodable {
let id: Int
let name: String
let empDetails: [Emp]
enum CodingKeys: String, CodingKey {
case id, name, empDetails, data
}
struct Emp: Codable {
let address: String
let ratings: Int
let empId: Int
let empName: String
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
name = try container.decode(String.self, forKey: .name)
let details = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .empDetails)
empDetails = try details.decode([Emp].self, forKey: .data)
}
}