小编rlu*_*bke的帖子

如何处理完全动态的JSON响应

也许社区中的某些人有类似的困难,并提出了一个可行的解决方案.

我们目前正在开发一个多语言键/值存储.鉴于此,我们通常不知道提前存储的内容.

考虑以下结构

struct Character : Codable, Equatable {
    let name:    String
    let age:     Int
    let gender:  Gender
    let hobbies: [String]

    static func ==(lhs: Character, rhs: Character) -> Bool {
        return (lhs.name == rhs.name
                   && lhs.age == rhs.age
                   && lhs.gender == rhs.gender
                   && lhs.hobbies == rhs.hobbies)
    }
}
Run Code Online (Sandbox Code Playgroud)

通过线路发送/接收字符实体时,一切都非常简单.用户可以向我们提供我们可以解码的类型.

但是,我们确实能够动态查询存储在后端中的实体.例如,我们可以请求'name'属性的值并返回该值.

这种活力是一个痛点.除了不知道它们是Codable之外的属性类型之外,返回的格式也可以是动态的.

以下是两个不同调用提取属性的响应示例:

{"value":"Bilbo"}
Run Code Online (Sandbox Code Playgroud)

{"value":["[Ljava.lang.Object;",["Bilbo",111]]}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,它可能相当于字典.

现在,我有以下结构来处理响应:

fileprivate struct ScalarValue<T: Decodable> : Decodable {
    var value: T?
}
Run Code Online (Sandbox Code Playgroud)

使用Character示例,传递给解码器的类型将是:

ScalarValue<Character>.self
Run Code Online (Sandbox Code Playgroud)

但是,对于单值,数组或字典情况,我有点卡住了.

我从一开始就开始:

fileprivate struct AnyDecodable: Decodable {
    init(from decoder: Decoder) …
Run Code Online (Sandbox Code Playgroud)

json swift swift4

7
推荐指数
1
解决办法
957
查看次数

标签 统计

json ×1

swift ×1

swift4 ×1