У меня есть следующая структура данных:
{
"type": "foo"
"data": { /* foo object */ }
}
Вот мой класс для его декодирования:
final public class UntypedObject: Decodable {
public var data: Data
enum UntypedObjectKeys: CodingKey {
case data
}
required public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: UntypedObjectKeys.self)
self.data = try values.decode(Data.self, forKey: .data)
}
}
Я получаю массив таких объектов, и вот как я его расшифровываю:
let decoder = JSONDecoder()
let objectList = try decoder.decode([UntypedObject].self, from: data)
Однако я получаю эту ошибку в консоли:
typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0)), Playground_Sources.UntypedObject.UntypedObjectKeys.data], debugDescription: " Ожидалось декодирование массива, но вместо этого был найден словарь.", baseError: nil))
Таким образом, возникает вопрос, возможно ли вообще декодировать правильный объект JSON в типизированный атрибут Data
, и если да, то как я могу этого добиться?
Data
. Независимо от того, является ли это словарем, массивом, числом или строкой. - person Eimantas   schedule 29.10.2017”data"
, независимо от формата? Если да, то выглядит сложно... ;) - person Paulo Mattos   schedule 29.10.2017