从解码器获取基础JSON

时间:2019-01-17 16:20:53

标签: json swift decodable

通过符合Decodable的Swift类型安全解码非常棒。有一个特别好的教程here,其中涵盖了基础知识,然后继续介绍一些更深层次的细节。

但是,我有一个层次结构,我想以一种类型安全的方式进行解码,但是在层次结构的某些嵌套节点中,我想捕获底层的JSON,以便可以将其传递给其他服务。

我的代码此时不应该理解基础数据的架构。它需要捕获JSON(作为StringData[String:Any]),以便以后可以传递。我的代码将数据视为具有未知架构的不透明Blob。

因此,我需要一种机制来从类型安全分析中“退出”并按原样获取一些原始数据。

这是我的意思(非常)简化的例子……

struct TopLevelThing: Decodable {
  let nestedStuff: [NestedThing]
}

struct NestedThing: Decodable {
  let id: Int
  let detail: FreeformJSON
}

我希望能够解码JSON,例如……

{
  "nestedStuff": [
    {
      "id": 321,
      "detail": {
        // Lots of stuff in here that's just captured, not parsed.
        "area": "floo bar"
      }
    },
    {
      "id": 123,
      "detail": {
        // Lots of stuff in here that's just captured, not parsed.
        "filbur": "it makes sense, really"
      }
    }
  ]
}

我还没有找到一种方法来“突破” Decodable提供的安全解析类型。我可以为init(from: Decoder) throws编写自定义NestedThing,但是我还没有找到从Decoder获取基础JSON的方法。

我也可以使用JSONSerialiser手动解码JSON,但是放弃所有类型安全的东西来实现此目标似乎很可耻。

0 个答案:

没有答案