如何从复杂的 json 创建简单的可编码结构

开发者

我从 API 收到了一个类似于此的复杂 json 响应。

{
    "result": "success",
    "count": 100,
    "details": [{
            "unnecessaryDetails": "something",
            "area": {
                "name": "Test1"
            }
        },
        {
            "unnecessaryDetails": "something",
            "area": {
                "name": "Test2"
            }
        },
        {
            "unnecessaryDetails": "something",
            "area": {
                "name": "Test3"
            }
        }
    ]
}

我的结构是

struct Person {
    var name: String
}

struct Response {
    var result: String
    var count: Int
    var details: [Person]
}

我不想为我从响应中收到的所有内容创建属性。我不能要求后端开发人员只提供必要的详细信息。如何避免不必要的细节并仅使用需要的细节创建结构?

瓦迪安

您可以跳过带有嵌套容器的中间数组和字典。

struct Person : Decodable {
    let name: String
}

struct Response : Decodable {
    let result: String
    let count: Int
    let details: [Person]

    enum CodingKeys: String, CodingKey { case result, count, details }
    enum DetailCodingKeys: String, CodingKey { case area }

    init(from decoder : Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        result = try container.decode(String.self, forKey: .result)
        count = try container.decode(Int.self, forKey: .count)
        var detailContainer = try container.nestedUnkeyedContainer(forKey: .details)
        var people = [Person]()
        while !detailContainer.isAtEnd {
            let areaContainer = try detailContainer.nestedContainer(keyedBy: DetailCodingKeys.self)
            let person = try areaContainer.decode(Person.self, forKey: .area)
            people.append(person)
        }
        details = people
    }
}

然而,工作量比添加额外的结构要大得多

struct Response : Decodable {
    let result: String
    let count: Int
    let details: [Detail]
}

struct Detail : Decodable {
    let area : Person
}

struct Person : Decodable {
    let name: String
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将json结构从简单转换为复杂?

Swift:可编码用于复杂的JSON

使用Perl编码复杂的JSON结构

如何在Golang中发送硬编码的复杂json响应

SWIFT 4嵌套JSON结构-可编码

如何将pandas df转换为复杂的json结构?

Swift 中的复杂 JSON。如何正确获取数据。不同的结构

如何使用JSON数据创建简单的UI树结构

如何使用 Swift 4.2 为可编码的 JSON 数组值创建 searchBar 全局搜索?

如何访问复杂的JSON

如何在Java中创建复杂的json对象?

如何使用角度6从json创建复杂表?

如何使用 Swift 4.2 将具有可编码结构的 JSON 响应加载到 tableview 中?

JS的复杂JSON结构

创建复杂的Json对象

复杂的JSON,如何获得价值?

可编码结构-解析JSON时缺少键时的枚举

iOS复杂JSON结构解析

如何在Angular 6中过滤复杂的结构化Json数据

在Angular中,如何解析和提取具有复杂结构(JSON)的HTTP响应?

如何使用ng-repeat将下面的json解析为如下所示的复杂表结构

如何在angular2 [打字稿]中定义具有复杂json结构的模型?

如何使用带突变键的可编码解码JSON?

如何忽略可编码的nil json值

在Golang中为复杂的JSON数组创建结构

如何使用 Spark scala 从字符串格式的复杂 JSON 创建数据帧

如何使用 C# 创建一个复杂的 JSON 对象

如何通过相当复杂的Json Response在C#Asp.Net中创建Dto

如何使用 Angularjs 2 中的接口为复杂的 JSON 对象创建模型