如何使用Swift Decodable协议解码嵌套的JSON结构?

FlowUI。SimpleUITesting.com:

这是我的JSON

{
    "id": 1,
    "user": {
        "user_name": "Tester",
        "real_info": {
            "full_name":"Jon Doe"
        }
    },
    "reviews_count": [
        {
            "count": 4
        }
    ]
}

这是我希望将其保存到的结构(不完整)

struct ServerResponse: Decodable {
    var id: String
    var username: String
    var fullName: String
    var reviewCount: Int

    enum CodingKeys: String, CodingKey {
       case id, 
       // How do i get nested values?
    }
}

我看过Apple的有关解码嵌套结构的文档,但是我仍然不明白如何正确执行JSON的不同级别。任何帮助都感激不尽。

代码不同:

另一种方法是创建一个与JSON紧密匹配的中间模型(借助于quicktype.io之类的工具),让Swift生成对它进行解码的方法,然后在最终数据模型中挑选所需的片段:

// snake_case to match the JSON and hence no need to write CodingKey enums / struct
fileprivate struct RawServerResponse: Decodable {
    struct User: Decodable {
        var user_name: String
        var real_info: UserRealInfo
    }

    struct UserRealInfo: Decodable {
        var full_name: String
    }

    struct Review: Decodable {
        var count: Int
    }

    var id: Int
    var user: User
    var reviews_count: [Review]
}

struct ServerResponse: Decodable {
    var id: String
    var username: String
    var fullName: String
    var reviewCount: Int

    init(from decoder: Decoder) throws {
        let rawResponse = try RawServerResponse(from: decoder)

        // Now you can pick items that are important to your data model,
        // conveniently decoded into a Swift structure
        id = String(rawResponse.id)
        username = rawResponse.user.user_name
        fullName = rawResponse.user.real_info.full_name
        reviewCount = rawResponse.reviews_count.first!.count
    }
}

如果reviews_count将来它包含多个值,这还使您可以轻松地进行迭代

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Decodable协议将此JSON转换为Swift结构?

如何使用Swift结构正确解码嵌套的JSON对象

如何使用Swift Decodable协议解析JSON API结构中的几个硬编码键?

Swift Decodable-如何解码已被base64编码的嵌套JSON

如何使用Decodable解码JSON数组?

Swift 4.1 Decodable无法使用nestedContainer解码嵌套数组

在Swift中使用Decodable解析嵌套的JSON

使用Decodable + Realm Swift解码自定义JSON

使用Decodable解析嵌套的JSON

解码嵌套的 JSON Swift

使用Decodable嵌套数据结构

Swift 4可解码协议中如何使用JSON字典类型解码属性

Swift [45]可解码协议中如何使用JSON字典类型解码属性

Swift-如何将平面json解码为嵌套结构?

使用嵌套结构在 Swift 中解码深度嵌套的对象

如何使用新的可解码协议解码此JSON?

如何在通用函数中使用Swift通用Decodable协议

如何从API调用中使用动态变量解码嵌套的JSON结构

Swift 5:解码嵌套JSON

Swift 4 Decodable:嵌套数组中的结构

使用可解码协议进行JSON解析

使用解码协议解析 Json(可编码)

使用Swift的Decodable协议解析CoinMarketCap API

在RxSwift中使用Swift 4 Decodable协议

快速使用Decodable提取和解码json数据

使用Decodable解码具有不同键值对的JSON

使用 Swift Decodable 进行动态(但称为另一个键值)JSON 解码

如何在Swift中使用许多唯一键对嵌套JSON进行解码?

使用Swift 4在iOS中将多级JSON解码为结构