Получить базовый JSON из декодера - PullRequest
0 голосов
/ 17 января 2019

Тип безопасного декодирования Swift в соответствии с Decodable великолепен. Здесь есть особенно хороший учебник , который охватывает основную информацию, а затем переходит к некоторым более глубоким деталям.

Однако у меня есть иерархия, которую я хотел бы декодировать безопасным для типов способом, но в некоторых из вложенных узлов иерархии я хотел бы захватить базовый JSON, чтобы он мог быть передан другим службам ,

Мой код не должен понимать схему базовых данных на данный момент. Он должен захватывать JSON (как String или Data или [String:Any]), чтобы его можно было впоследствии передать. Мой код рассматривает данные как непрозрачный большой двоичный объект с неизвестной схемой.

Так что мне нужен механизм, чтобы «убежать» от парсинга типа safe и получить некоторые исходные данные как есть.

Вот (очень) упрощенный пример того, что я имею в виду ...

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"
      }
    }
  ]
}

Я не нашел способа "вырваться" из парсинга типа safe, который обеспечивает Decodable. Я могу написать пользовательский init(from: Decoder) throws для NestedThing, но я не нашел способа получить базовый JSON из Decoder.

Я мог бы также вручную декодировать JSON, используя JSONSerialiser, но, кажется, стыдно отказаться от всех типов безопасных вещей, чтобы добиться этого.

...