【问题标题】:How to create model for this json with codable如何使用可编码为此 json 创建模型
【发布时间】:2019-08-13 12:16:03
【问题描述】:

我有下面的 json,我想用可编码的 json 创建模型。

{
    id = 1;
    name = "abc";
    empDetails = {
    data = [{
        address = "xyz";
        ratings = 2;
        "empId" = 6;
        "empName" = "def";
    }];
    };
}

型号

struct Root: Codable {
    let id: Int
    let name: String
    let empDetails:[Emp]
    struct Emp: Codable {
        let address: String
        let ratings: Int
        let empId: Int
        let empName: String
    }
}

我不需要密钥data。我想将data 的值设置为empDetails 属性

如何使用init(from decoder: Decoder) throws 方法做到这一点?

【问题讨论】:

  • 看看quicktype.io
  • @vadian 我想你不明白我的问题。我在 json 中有empDetails->data。我不希望我的结构中有这些数据。
  • @vadian 在我的 json 中,empDetails 的类型是 [String:Any]data 的类型是 [[String:Any]]。我可以用Root->EmpDetails->Data->[Emp] 创建一个嵌套结构。在这里,我想避免在我的结构中使用data
  • @vadian 好的。我会检查它

标签: swift codable


【解决方案1】:

只需创建 enum CodingKeys 并在 struct Root 中实施 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)
    }
}

【讨论】:

  • 感谢您的回答。但请检查我的 josn。它里面有empDetails 键和data 键。我猜你的答案行不通
  • @iOSDev 抱歉造成误会。我已根据要求更新了答案。
  • 它有效。如果我们使用自定义init 方法,我们不能只使用init 方法中的一个属性empDetails。如果我从init 方法中注释id = ...name = ...,我会得到从初始化程序返回而不初始化所有存储的属性错误
猜你喜欢
  • 2020-04-30
  • 2021-02-25
  • 2015-07-31
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多