Тип безопасного декодирования 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
, но, кажется, стыдно отказаться от всех типов безопасных вещей, чтобы добиться этого.